web-dev-qa-db-ja.com

Railsルーティングのリソースとリソースの違い?

Railsルーティングでのresourceresourcesの違いは何ですか

 resource :geocoder

そして

 resources :posts

それらの実際の違いは何ですか?

34

本質的に、リソースのルーティングは、リソースがコントローラーにアクション能力を与えるときです。

http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use

複数のリソースが任意のアイテムに対する一般的なリクエストを処理する方法として使用される場合、単一のリソースは現在のアイテムを処理する方法です。

つまり、言い換えると、Appleのコレクションがある場合、特定のAppleを取得するには、ルーターの「Apples」に、AppleのIDを送信して何を取得するかをAppleに通知する必要があります。 。すでにAppleを1台所有している場合、IDは必要ありません。

2つのアクション(またはルート)の違いを確認してください。

  • リソース:Index、新規、作成、表示、編集、更新、破棄
  • リソース:新規、作成、表示、編集、更新、破棄

あなたの例では:

  1. コントローラ「ジオコーダ」は、編集、作成、更新などに使用できる単一のリソースです。
  2. コントローラーの「投稿」は、インデックス登録、編集、作成などが可能な着信の一般的な投稿を処理する複数のリソースです。
41
sksallaj

単数のリソース:

時には、クライアントがIDを参照せずに常に検索するリソースがある場合があります。たとえば、/profile現在ログインしているユーザーのプロファイルを常に表示します。

または、通常、現在ログインしているユーザーは1つの組織に属しているため、彼/彼女の組織のプロフィールページに移動するには、2つのルートを使用できます。

#1
/organizations/:id

#2
/organization #simply

ここでは、後の実装の方が理にかなっています。そうではありませんか?関連付けから組織オブジェクトを取得します

# in organizations#show
@organization = current_user.organization

このような単一のリソースを定義するには、resourceメソッドを使用します。例

# in routes.rb
resource :organization

アプリケーションに6つの異なるルートを作成し、すべて組織コントローラーにマッピングします。

enter image description here

一方、resourcesメソッドを使用して複数のリソースを定義します

resources :organizations

enter image description here

15
illusionist

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

時には、クライアントがIDを参照せずに常に検索するリソースがある場合があります。たとえば、現在ログインしているユーザーのプロファイルを常に/ profileに表示したいとします。この場合、単一のリソースを使用して、(/ profile /:idではなく)/ profileをshowアクションにマップできます。

それを確認する良い方法は、リソースが1つしかないことが想定されているため、リソースにインデックスアクションがないことです。

12
Ismael Abreu

インデックスビューだけだと思います。

また、リソースヘルパーとフォームヘルパーのルーティングに関する問題も報告されています。個人的に、私は構文を使用します:

resources :someresource, except: :index 

報告されたバグ を回避するため。

3
Han