16

ドキュメントを読みましたが、すべてを理解しているかどうかはまだわかりません。

:new特にパラメータがある理由。私が理解している限り、それは:collectionパラメーターに置き換えることができます。

では、これら 3 種類のルートの違いは何でしょう?

4

3 に答える 3

32

違いは、生成される URL です。
3 つのリソースを推測してみましょう:

map.resources :users, :collection => { :rss => :get }
map.resources :users, :member => { :profile => :get }
map.resources :users, :new => { :draft => :get }

最初のルートは以下を作成します:

/users/rss

コントローラー名とアクション名の間には何もありません。ユーザーのリストの RSS フィードを取得するために、他のパラメーターは必要ありません。

2 つ目は、アクション「プロファイル」をオブジェクトのメンバーとして作成します。したがって、次のようになります。

/users/1/profile

「1」はユーザーのto_param. プロフィールを表示するには、ユーザーの ID が必要です。

3 つ目は、アクション「ドラフト」を新しいアクションのメンバーとして作成します。したがって、次のようになります。

/users/new/draft

「ドラフト」アクションは、ユーザーの作成を受け入れる前にユーザーのドラフトを表示します。

これが、:collection、:member、:new の違いです。それぞれが異なるルートを作成し、それぞれに独自の目的があります。

于 2009-11-03T12:59:14.360 に答える
9

:memberパターンでパスを作成します/:controller/:id/:your_method

:collectionパターンでパスを作成します/:controller/:your_method

:newパターンでパスを作成します/:controller/:your_method/new(パスの最後の要素、つまりnew定数であることに注意してください)

NewCollection主にイデオロギー層で異なります。これが、REST の専門家がより大きなリソース内に REST の「サブリソース」を作成することを理解する方法です。

于 2009-11-03T14:22:00.697 に答える
2

ダミアンの説明は、:new に関するセクションを除いて、ほとんど正しいです。

http://guides.rubyonrails.org/routing.htmlにある ruby​​ on rails のルーティング ガイドをよく読んでください。ルーティングについては、裏返しに説明されています。セクション 3.11.3 (新しいルートの追加) で :new の機能について説明していますが、:member や :collection とは大きく異なります。

基本的に map.resources :photos, :new => { :upload => :post } は POST HTTP 動詞を使用して /photos/upload を作成します。

于 2009-11-03T16:15:50.727 に答える