2

Rails がネストされたリソースの親を自動的に推測する方法を知りたいです。私はRouteSetでいくつかの宿題をしましたが、module_evalと動的に生成されたすべてのメソッドで、それが親をどのように推測するかわかりませんでした.

これは私が具体的に話していることです

適切なモデルとコントローラーを備えた常緑の投稿とコメントのデータ階層を想定します。

これらのネストされたルーティングは次のようになります

resources :posts do
  resources :comments
end

私がコントローラーまたはコメントレールのビューのコンテキストにいる場合、次のように投稿を推測できます。

post_comments_path

これは、現在の投稿の下のコメント インデックスにマップされます。

投稿コントローラーとビューのコンテキストにいる場合、レールはこのルートの投稿を推測できなくなり、提供する必要があります。

post_comments_path # error
post_comments_path(@post) # ok

他のスレッドでは、2 行目が正しい方法であることが示唆されています。

私は気が狂っているかもしれませんが、Rails がどのようにして Post を推測できるかを知りたいと思っています。ほとんどネストされたものへのメニュー リスト ルートのルート コントローラーに 1 つまたは 2 つのアクションがあるエッジ ケースがあります。私は、Rails にこれらのいくつかのアクションの現在の親が何であるかを伝えたいと思っています。

アップデート:

post_id パラメータを設定するという基本的なことを試しました。request-params と params の両方で実際に設定されていることを確認しますが、成功していません。Rails がパラメーターのコピーを作成したという漠然とした記憶があるので、おそらくルーティング ヘルパーは追加されたパラメーターなしで別のコピーを持っているのでしょうか? ( @post インスタンス変数を設定しても効果はありません。確認する必要がありました。)

4

1 に答える 1

1

さて、パスのデフォルトパラメータに関係しているようです。

すなわち。

get '/posts/:post_id/comments', to: "comments#index", as: :show_default_comments, defaults:{post_id: Post.all.first.id}

indexこれにより、最初の投稿に基づいたコメント アクションが表示されるため、コメント コントローラーにいる場合、デフォルトpost_idは の現在の値に設定されていると思いますpost_id。これを確認するには、さらにテストを行う必要があります。

(私のコメントからコピー)見つけました。default_url_optionsここに . インデックスビューが壊れてもこれが機能することを確認しましたが、これは私が行っている限り、ある時点で default_url_options が渡されるようであり、これが推論が発生する場所であり、リンクのメソッドを使用して設定できます。

コントローラで url_options メソッドを定義してパスの default_url_options を設定すると、ルーティングの目的で親を動的に指定できます。

于 2013-10-31T16:43:18.993 に答える