1

ransack を使用して GET 経由でパラメーターをフォームに渡そうとしていますが、マージしようとすると params[:q] が問題を引き起こしていることを除いて、通常は正常に機能します。

コントローラー ( ransackを使用)

  def index
    @search = Record.ransack(params[:q])
    @records = @search.result.page(params[:page])
  end

見る

<ul>
  <% Genre.all.each do |genre| %>
    <% category_count = @search.result.joins(:genre).where("genres.id = ?", genre.id).size %>
    <% unless category_count == 0 %>
        <li>
            <%= link_to genre.name, params.merge(:"q[genre_name_eq]" => genre.name) %> (<%= category_count %>)
        </li>
    <% end %>
  <% end %>
</ul>

しかし、私は重複し続けています:

q[genre_name_eq]=Rockabilly&q[genre_name_eq]=Rockabilly

q[] がなければ、params を正しく管理し、前のものを上書きします。

またparams[:q].merge(:genre_name_eq)、q[] がない場合に問題が発生することを試してみましたが、それも機能せず、genre_name_eq=q[] がありません

他にどのようにq[]を処理して、値を数回複製するのではなく値を置き換えることができますか?

4

1 に答える 1

1

EDIT(編集後)

params単純なクエリ文字列ではなく、ハッシュです。ネストされた値を更新する場合は、ネストされたハッシュを更新する必要があります。

最初にparams[:q]存在し、ハッシュであることを確認します(コントローラー内)

params[:q] ||= {}

q次に、ビューでのみ更新します

<% params[:q].update :genre_name_eq => genre.name %>
<%= link_to genre.name, params %>
于 2012-10-29T09:14:08.380 に答える