2010-05-10 3 views
0

morceaux sur Rap Genius ont des chemins comme /lyrics/The-notorious-b-i-g-ft-mase-and-puff-daddy/Mo-money-mo-problems qui sont définis dans routes.rb comme:manière plus facile de générer des chemins

map.song '/lyrics/:artist_slug/:title_slug', :controller => 'songs', :action => 'show' 

Quand je veux générer un tel chemin, j'utilise song_url(:title_slug => song.title_slug, :artist_slug => song.artist_slug). Cependant, je préférerais de beaucoup pouvoir taper song_url(some_song). Est-il possible que je peux y arriver en plus de définir une aide comme:

def x_song_path(song) 
    song_path(:title_slug => song.title_slug, :artist_slug => song.artist_slug) 
    end 

Répondre

0

Peut-être au lieu de définir deux limaces vous pourriez avoir un qui a à la fois le titre et l'artiste dans le cadre de celui-ci. Donc, votre itinéraire serait:

map.song '/lyrics/:slug', :controller => 'songs', :action => 'show' 

Ensuite, dans votre modèle définissent un to_param qui retourne la limace:

class Song < ActiveRecord::Base 
    def to_param 
    artist.gsub(/\W+/, '-') + '/' + title.gsub(/\W+/, '-') 
    end 
end 

Je ne suis pas complètement sûr si cela fonctionnera (il pourrait essayer de coder le "/» bien que si vous modifiez la route vers

map.song '/lyrics/*:slug', :controller => 'songs', :action => 'show' 

vous pourriez être en mesure de contourner le problème. Il faut espérer qu'au moins vous donne des idées du bon endroit pour regarder.

Questions connexes