web-dev-qa-db-ja.com

url_for?

_url_for([:edit, @post])
_

動作しており、_/comments/123/edit_を生成しています。次に、クエリパラメータを追加する必要があります。

_/comments/123/edit
_

それは

_/comments/123/edit?qp=asdf
_

url_for([:edit, @post], :qp => "asdf")を試しましたが、うまくいきませんでした。

30
randomguy

名前付きルートを使用します。

edit_post_path(@post, :qp => "asdf")
30
Simone Carletti

polymorphic_pathを使用できます

polymorphic_path([:edit, @post], :qp => 'asdf')
21
epochwolf

paramsurl_forに渡すことができます。ソースコードでチェックアウトしてください: https://github.com/Rails/rails/blob/d891c19066bba3a614a27a92d55968174738e755/actionpack/lib/action_dispatch/routing/route_set.rb#L675

13

Simone Carlettiの answer は確かに機能しますが、Railsルーティングガイドで説明されているように、オブジェクトを使用してURLを作成し、に依存しない場合があります。 __path_ヘルパー。

BenSwards の両方からの回答は、これを行う方法を正確に説明しようとしていますが、私にとって使用されている構文はエラーになります(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コンポーネントを含む配列だけを残します。

これが、最後の要素としてハッシュを持つフラット配列が機能し、ネストされた配列が機能しない理由です。

10
Michael Smart