2009-11-21 10 views
0

J'essaie de comprendre comment changer cette règle directement sur les map.resources:Rails RESTful Routes: params override [: id] ou [params: model_id] par défaut

en supposant que je voie:

map.resource :user, :as => ':user', :shallow => true do |user| 
    user.resources :docs, :shallow => true do |file| 
     file.resources :specs 
    end 
end 

donc j'aurais RESTful routes comme celle-ci:

/: utilisateur/docs

/docs /: id

/docs /: doc_id/spécifications

donc je vois qu'il est difficile de suivre le params[:doc_id] sur cette affaire parce que parfois son params[:id] et parfois son params[:doc_id] et dans ce cas, je voudrais appeler toujours un nom spécifique donc je n'aurai pas à créer deux déclarations différentes pour mes filtres.

Eh bien, je l'ai fait un peu de recherche et j'ai trouvé ce patch:

http://dev.rubyonrails.org/ticket/6814

et fondamentalement ce que cela fait est de vous donner la possibilité d'ajouter un: paramètre clé sur vous map.resources donc vous pouvez définir la façon dont vous souhaitez référencer plus tard, afin que nous puissions avoir quelque chose comme:

map.resources :docs, :key => :doc ... 

donc je toujours appeler le params[:doc] avec la place param.

Mais en fait ce patch est un peu vieux (3 ans maintenant) alors je me demandais si nous n'avions rien de plus nouveau et déjà intégré pour les rails pour faire cette tâche?

P.S Je ne suis pas sûr de cette méthode de to_param définie à l'intérieur du modèle, apparemment, cela ne change rien à mes demandes, et les journaux que je reçois toujours: Parameters: {"doc_id"=>"6"} ou Parameters: {"id"=>"6"} tout le temps.

Répondre

0

Un procédé de fabrication des paramètres un peu plus convivial sans écrire des itinéraires entièrement personnalisés est

# docs_controller.rb 
def show 
    @doc = Doc.find(params[:doc].to_i) 
end 

# doc.rb 
def to_param 
    [ id, permalink ].join("-") 
    # assumes you're storing a permalink formatted version of the name of your doc 
end 

# routes.rb 
map.resources :docs 

Cela vous donnera les URL qui ressemblent à example.com/docs/234-the-name-of -your-doc

+0

Je vois après avoir posté que je ne réponds pas exactement à ta question. Rails n'a pas la fonctionnalité que vous recherchez, les valeurs par défaut de params [: id] pointant vers la ressource actuelle est toujours le chemin à parcourir. Les enregistrements parents obtiennent les paramètres [: parent_id] pour la cohérence. Pour les filtres globaux en dehors de la ressource actuelle, pourquoi ne pas simplement passer la variable appropriée en tant que paramètre au filtre? – bensie

+0

oui, c'est vrai, merci bensie. mais encore, cette chose ne vous donne pas la possibilité de changer la clé de ressource son genre de inutile n'est-ce pas? Quels seraient les inconvénients dans cette situation? Je ne comprends pas: \ – zanona