web-dev-qa-db-ja.com

rails単数のリソースはまだ複数ですか?

単数にしたい検索ルートがありますが、単数のルートを指定すると、複数のコントローラールートが作成されますが、これはどのようになっているのですか?

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

37
holden

はい、そうです。 Railsルーティングに関するガイドからの引用:

単一のルート(/ account)と複数のルート(/ accounts/45)に同じコントローラーを使用したい場合があるため、単一のリソースは複数のコントローラーにマップされます。

http://edgeguides.rubyonrails.org/routing.html#singular-resources

35
M. Cypher

これを修正するには、config/initializers/inflections.rbで「検索」の複数形を無数に設定します。

ActiveSupport::Inflector.inflections do |inflect|
   inflect.uncountable %w( search )
end

これで、検索のみを使用できるようになります

23
Yule

検索は本当にリソースですか?もしそうなら、あなたが作成するのは、タイプが「検索」のモデルのインスタンスです。その場合、複数のコントローラーが「検索」することは完全に理にかなっています。

ただし、複数のモデルを持たないコントローラーの場合は、そうでない可能性があります。その場合、resource :searchを使用してルートを定義する必要はありません。get 'search/create'を使用して、「検索」の「作成」アクションに「検索/作成」で応答するようにルーターに指示できます。コントローラ。

6
Matt Connolly

作成用に1つのルートのみを生成しますか?

その場合:

resource :search, :only => :create

RESTリソースのコントローラーの名前がsearchs_controllerであるというのは慣例です(resource :search, :only => :create, :controller => :search、しかしそれは価値がありません...)。

6