48

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

 resource :geocoder

 resources :posts

それらの本当の違いは何ですか?

4

4 に答える 4

56

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

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

複数形のリソースが任意の項目に対する一般的な要求を処理する方法として使用される場合、単一のリソースは現在の項目を処理する方法です。

つまり、リンゴのコレクションがある場合、特定のリンゴを取得するには、リンゴの ID を送信して、どのリンゴを取得するかをルーターの「リンゴ」に指示する必要があります。すでに Apple を 1 つ持っている場合、ID は必要ありません。

どのアクション (またはルート) があるかを見て、2 つの違いに注意してください。

  • リソース: Index、new、create、show、edit、update、destroy
  • リソース: 新規、作成、表示、編集、更新、破棄

あなたの例では:

  1. コントローラーの「ジオコーダー」は、編集、作成、更新などに使用できる単一のリソースです。
  2. コントローラーの「投稿」は、インデックス、編集、作成などが可能な一般的な投稿を処理する複数のリソースです。
于 2012-07-06T05:29:06.843 に答える
25

特異なリソース:

クライアントが常に 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

ここに画像の説明を入力

于 2015-10-21T11:31:14.920 に答える
14

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

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

これを確認する良い方法は、リソースがインデックス アクションを持っていないことです。

于 2012-07-06T05:15:49.943 に答える
3

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

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

resources :someresource, except: :index 

報告されたバグを避けるために。

于 2012-07-06T05:17:36.363 に答える