_url_for([:edit, @post])
_
動作しており、_/comments/123/edit
_を生成しています。次に、クエリパラメータを追加する必要があります。
_/comments/123/edit
_
それは
_/comments/123/edit?qp=asdf
_
url_for([:edit, @post], :qp => "asdf")
を試しましたが、うまくいきませんでした。
名前付きルートを使用します。
edit_post_path(@post, :qp => "asdf")
polymorphic_path
を使用できます
polymorphic_path([:edit, @post], :qp => 'asdf')
params
をurl_for
に渡すことができます。ソースコードでチェックアウトしてください: https://github.com/Rails/rails/blob/d891c19066bba3a614a27a92d55968174738e755/actionpack/lib/action_dispatch/routing/route_set.rb#L675
Simone Carlettiの answer は確かに機能しますが、Railsルーティングガイドで説明されているように、オブジェクトを使用してURLを作成し、に依存しない場合があります。 __path
_ヘルパー。
Ben と Swards の両方からの回答は、これを行う方法を正確に説明しようとしていますが、私にとって使用されている構文はエラーになります(Rails 4.2.2、これは4.2.4と同じ動作をします。これは、この回答の時点での現在の安定したリリースです)。
オブジェクトからURL /パスを作成すると同時にパラメーターを渡すための正しい構文は、ネストされた配列ではなく、URLコンポーネントを含むフラットな配列と、最後の要素としてのハッシュにする必要があります。
url_for([:edit, @post, my_parameter: "parameter_value"])
ここでは、最初の2つの要素がURLのコンポーネントとして解析され、ハッシュはURLのパラメーターと見なされます。
これは_link_to
_でも機能します。
link_to( "Link Text", [:edit, @post, my_parameter: "parameter_value"])
Ben&Swardsが提案したように_url_for
_に電話すると:
url_for([[:edit, @post], my_parameter: "parameter_value"])
次のエラーが発生します。
ActionView::Template::Error (undefined method 'to_model' for #<Array:0x007f5151f87240>)
トレースは、これが_polymorphic_routes.rb
_の_ActionDispatch::Routing
_から、_url_for
_(_routing_url_for.rb
_)の_ActionView::RoutingUrlFor
_を介して呼び出されていることを示しています。
_gems/actionpack-4.2.2/lib/action_dispatch/routing/polymorphic_routes.rb:297:in `handle_list'
gems/actionpack-4.2.2/lib/action_dispatch/routing/polymorphic_routes.rb:206:in `polymorphic_method'
gems/actionpack-4.2.2/lib/action_dispatch/routing/polymorphic_routes.rb:134:in `polymorphic_path'
gems/actionview-4.2.2/lib/action_view/routing_url_for.rb:99:in `url_for'
_
問題は、URLコンポーネント(シンボル、モデルオブジェクトなど)の配列を想定していることです。ではなく別の配列を含む配列です。
_routing_url_for.rb
_から適切な code を見ると、最後の要素としてハッシュを持つ配列を受け取ると、- extract ハッシュになることがわかりますそしてパラメータとして扱い、URLコンポーネントを含む配列だけを残します。
これが、最後の要素としてハッシュを持つフラット配列が機能し、ネストされた配列が機能しない理由です。