単数にしたい検索ルートがありますが、単数のルートを指定すると、複数のコントローラールートが作成されますが、これはどのようになっているのですか?
resource :search
くれます
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"}
複数のコントローラーの「検索」
私は本当に1つのルートしかありません...検索を作成するには:
だから私はやった:match "search" => "search#create"
コントローラーを複数にしておくべきかどうか、私は将来について疑問に思っていますか? Rails 3.0.9
はい、そうです。 Railsルーティングに関するガイドからの引用:
単一のルート(/ account)と複数のルート(/ accounts/45)に同じコントローラーを使用したい場合があるため、単一のリソースは複数のコントローラーにマップされます。
http://edgeguides.rubyonrails.org/routing.html#singular-resources
これを修正するには、config/initializers/inflections.rbで「検索」の複数形を無数に設定します。
ActiveSupport::Inflector.inflections do |inflect|
inflect.uncountable %w( search )
end
これで、検索のみを使用できるようになります
検索は本当にリソースですか?もしそうなら、あなたが作成するのは、タイプが「検索」のモデルのインスタンスです。その場合、複数のコントローラーが「検索」することは完全に理にかなっています。
ただし、複数のモデルを持たないコントローラーの場合は、そうでない可能性があります。その場合、resource :search
を使用してルートを定義する必要はありません。get 'search/create'
を使用して、「検索」の「作成」アクションに「検索/作成」で応答するようにルーターに指示できます。コントローラ。
作成用に1つのルートのみを生成しますか?
その場合:
resource :search, :only => :create
RESTリソースのコントローラーの名前がsearchs_controllerであるというのは慣例です(resource :search, :only => :create, :controller => :search
、しかしそれは価値がありません...)。