0

URLが次のようになるようにパラメーターを送信する必要があるページがあります。

/my_controller?stores%5BStoreName%5D=1

ただし、フォームを作成しようとすると、次のlink_toURL が表示されます。

/my_controller?stores%5B%5D=5BStoreName&stores%5B%5D=1

これは私の見解からの link_to コードです:

<%= link_to store, my_controller_path(:stores => [store, 1]) %>

必要なリンクに一致するパラメーターで構造化された URL を取得するようにコードを変更するにはどうすればよいですか?

私のパラメータは のように見えるはずですが{"stores"=>{"StoreName"=>"1"}、今は のように見えます{"stores"=>["StoreName", "1"]

コントローラ:

わかりやすくするために、このハッシュを読み取るコントローラー内のインデックス メソッドを次に示します。

def index    
  @all_stores = Product.all_stores
  @selected_stores = params[:stores] || session[:stores] || {}

  if @selected_stores == {}
    @selected_stores = Hash[@all_stores.map {|store| [store, store]}]
  end
  if params[:stores] != session[:stores]
    session[:stores] = params[:stores]
    redirect_to :stores => @selected_stores and return
  end
  @products = Product.order("created_at desc").limit(150).find_all_by_store(@selected_stores.keys).group_by { |product| product.created_at.to_date}
  . . . etc

バックグラウンド:

ここでの全体像は、目的のページ (上記のリンクがリンクするページ) は、ストアによってフィルター処理されたすべての製品を一覧表示するページです。通常、フィルターは一連のチェックボックスを使用して機能します (ユーザーはチェックボックスをマークして、特定の店舗の商品を表示できます)。必要なリンクは、チェックボックスをマークすることなく、目的のフィルターが既に適用されたこのページにユーザーを直接誘導します。

追加の参考として、リンク先ページの商品をフィルタリングするチェックボックス ヘルパーを次に示します。

<%= check_box_tag "stores[#{store}]", 1, @selected_stores.include?(store), :id => "stores_#{store}" %>
4

1 に答える 1

1

使用する<%= link_to store, my_controller_path(:stores => { store => 1}) %>

于 2013-01-31T12:49:02.587 に答える