J'ai un itinéraire de recherche que je voudrais rendre singulier mais quand je spécifie un itinéraire singulier, il fait toujours plusieurs itinéraires de contrôleur, est-ce ainsi qu'il est censé être?
resource :search
Donne moi
search POST /search(.:format) {:action=>"create", :controller=>"searches"}
new_search GET /search/new(.:format) {:action=>"new", :controller=>"searches"}
edit_search GET /search/edit(.:format) {:action=>"edit", :controller=>"searches"}
GET /search(.:format) {:action=>"show", :controller=>"searches"}
PUT /search(.:format) {:action=>"update", :controller=>"searches"}
DELETE /search(.:format) {:action=>"destroy", :controller=>"searches"}
Le contrôleur pluriel "recherche"
Je n'ai vraiment qu'un seul itinéraire ... pour créer une recherche:
J'ai donc fait: match "search" => "search#create"
Je me demande juste pour l'avenir si je suis toujours censé garder le contrôleur au pluriel? Rails 3.0.9
Oui, c'est comme ça que ça devrait être. Citation du Rails Guide sur le routage:
Étant donné que vous souhaiterez peut-être utiliser le même contrôleur pour une route singulière (/ account) et une route plurielle (/ accounts/45), les ressources singulières sont mappées sur plusieurs contrôleurs.
http://edgeguides.rubyonrails.org/routing.html#singular-resources
Vous pouvez résoudre ce problème en définissant le pluriel de "recherche" comme indénombrable dans config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable %w( search )
end
Cela devrait maintenant permettre à la recherche d'être utilisée uniquement
La recherche est-elle vraiment une ressource? Si c'est le cas, alors ce que vous créez est une instance d'un modèle avec un type de "recherche", auquel cas le contrôleur pluriel "recherche" est parfaitement logique.
Cependant, si c'est un contrôleur qui n'a pas plusieurs modèles, alors peut-être pas. Dans ce cas, vous n'avez pas besoin de définir les routes avec resource :search
vous pouvez simplement utiliser get 'search/create'
pour dire au routeur de répondre "rechercher/créer" à l'action "créer" dans votre contrôleur "recherche".
Voulez-vous qu'un seul itinéraire soit généré pour la création?
Si c'est le cas:
resource :search, :only => :create
Le fait que le contrôleur de la ressource REST est nommé search_controller est une convention (que vous pouvez modifier en forçant le nom du contrôleur dans l'itinéraire avec resource :search, :only => :create, :controller => :search
, mais ça ne vaut pas le coup ...).