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