Railsルーティングでのresource
とresources
の違いは何ですか
resource :geocoder
そして
resources :posts
それらの実際の違いは何ですか?
本質的に、リソースのルーティングは、リソースがコントローラーにアクション能力を与えるときです。
http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use
複数のリソースが任意のアイテムに対する一般的なリクエストを処理する方法として使用される場合、単一のリソースは現在のアイテムを処理する方法です。
つまり、言い換えると、Appleのコレクションがある場合、特定のAppleを取得するには、ルーターの「Apples」に、AppleのIDを送信して何を取得するかをAppleに通知する必要があります。 。すでにAppleを1台所有している場合、IDは必要ありません。
2つのアクション(またはルート)の違いを確認してください。
あなたの例では:
単数のリソース:
時には、クライアントがIDを参照せずに常に検索するリソースがある場合があります。たとえば、/profile
現在ログインしているユーザーのプロファイルを常に表示します。
または、通常、現在ログインしているユーザーは1つの組織に属しているため、彼/彼女の組織のプロフィールページに移動するには、2つのルートを使用できます。
#1
/organizations/:id
#2
/organization #simply
ここでは、後の実装の方が理にかなっています。そうではありませんか?関連付けから組織オブジェクトを取得します
# in organizations#show
@organization = current_user.organization
このような単一のリソースを定義するには、resource
メソッドを使用します。例
# in routes.rb
resource :organization
アプリケーションに6つの異なるルートを作成し、すべて組織コントローラーにマッピングします。
一方、resources
メソッドを使用して複数のリソースを定義します
resources :organizations
http://guides.rubyonrails.org/routing.html#singular-resources
時には、クライアントがIDを参照せずに常に検索するリソースがある場合があります。たとえば、現在ログインしているユーザーのプロファイルを常に/ profileに表示したいとします。この場合、単一のリソースを使用して、(/ profile /:idではなく)/ profileをshowアクションにマップできます。
それを確認する良い方法は、リソースが1つしかないことが想定されているため、リソースにインデックスアクションがないことです。
インデックスビューだけだと思います。
また、リソースヘルパーとフォームヘルパーのルーティングに関する問題も報告されています。個人的に、私は構文を使用します:
resources :someresource, except: :index
報告されたバグ を回避するため。