1. ホーム
  2. ruby-on-rails

[解決済み】link_toにクエリストリングパラメータを追加する。

2022-04-05 11:18:07

質問

link_to UrlHelperにクエリ文字列のパラメータを追加するのに苦労しています。 例えば、Indexビューがあり、ソート、フィルタリング、ページネーション(will_paginate経由)のUI要素を持っています。 will_paginateプラグインは、クエリストリングパラメータのページ内永続化を正しく管理します。

クエリストリングパラメータをgive named routeに追加する自動的なメカニズムはありますか、それとも手動で追加する必要がありますか? この一見単純に見える構造について、多くの調査を行ったのですが、私は何もわかりませんでした。

編集

課題の一部をご紹介します。

  1. バケツとランプ、ソートという2つのクエリ文字列パラメータがある場合、link_toでどちらかに特定の値を設定し、もう一方は現在の値を維持するにはどうすればよいでしょうか。 たとえば、以下のようになります。

    <%= link_to "0", profiles_path(:bucket => '0', :sorting=>?? ) %>
    
    
  2. 複数のクエリ文字列パラメータ、bucket & sorting & page_size があり、そのうちのひとつに値を設定したい場合、残りのパラメータの名前と値を「自動的に」含める方法はありますか? 例えば

    <%= link_to "0", profiles_path(:bucket => '0', [include sorting and page_size name/values here] ) %>
    
    
  3. will_paginateプラグインは、そのページ変数と他のクエリーストリング変数を自動的に管理します。 ページサイズを管理するための自動的なUI要素はないようです。 ページサイズの選択リストを作成するコードを見たことがありますが、私はむしろこのためのA要素(SOのような)が欲しいと思っています。 この課題の一部は#2に関連しており、一部はレコードの存在/非存在に基づいてこのUI要素を表示/非表示にすることに関連しています。 別の言い方をすれば、私は、ページへのレコードが存在する場合にのみ、ページサイズのリンクを含めたいのです。 さらに、他のQS変数(すなわち、ページ、バケット、ソート)をlink_toに名前付きで含めるのではなく、自動的に含めることを希望しています。

どのように解決するのですか?

link_to に関する API ドキュメント は、名前付きルートとoldstyleルートの両方にクエリ文字列を追加する例をいくつか示しています。 これはあなたが望むものですか?

link_to は、アンカーやクエリ文字列を含むリンクも生成できます。

link_to "Comment wall", profile_path(@profile, :anchor => "wall")
#=> <a href="/profiles/1#wall">Comment wall</a>

link_to "Ruby on Rails search", :controller => "searches", :query => "ruby on rails"
#=> <a href="/searches?query=ruby+on+rails">Ruby on Rails search</a>

link_to "Nonsense search", searches_path(:foo => "bar", :baz => "quux")
#=> <a href="/searches?foo=bar&amp;baz=quux">Nonsense search</a>