4

次のネストされた特異ルートがあります。

resources :listings do
  resource :logo, only: [ :edit, :update ]
end

期待どおり、2 つの正しいルートが生成されます。

edit_listing_logo GET /listings/:listing_id/logo/edit(.:format) logos#edit
listing_logo PUT /listings/:listing_id/logo(.:format) logos#update

edit_listing_logo_path にリダイレクトすると

redirect_to edit_listing_logo_path( @listing, @logo )

または更新フォームを作成するとき

<%= form_for [ @listing, @logo ] do |f| %>

結果のリンクには、このように最後に常に単一のリソース ID が付加されます

/listings/2/logo.1

このアプリではまだ応答形式を使用していないので、問題なく動作しています。しかし、このリンク生成は奇妙に思え、さまざまな応答形式で使用すると問題が発生することが予想されます。

これは、Rails Nested Singular Resource Routingでも説明されていますが、'show' パスはまったく使用していないことに注意してください。

ご意見ありがとうございます。

4

1 に答える 1

1

edit_listing_logo_path(@listing)詳細なパス メソッド(@Martin Sojka で言及) を使用するか、オブジェクト自体の代わりにシンボルを使用することで、必要な答えを得ることができると思います。

したがって、通常の形式を使用する代わりに:

form_for [ @listing, @logo ]

次のように記述して、オブジェクトの特異性 (および末尾の ID) を破棄できます。

form_for [@listing :logo]

コントローラーで別のアクションを呼び出したい場合は、配列の前に置くことができます。

form_for [:edit, @listing :logo]

それがうまくいくことを願っています-それは私の問題を解決したようです.

于 2013-09-29T14:57:07.690 に答える