1

我正在尝试通过 GET 将参数传递给使用 ransack 的表单,它通常可以正常工作,只是当我尝试合并它时 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[:q].merge(:genre_name_eq)了在没有 q[] 时会导致问题,并且它也不起作用,给我genre_name_eq=并且没有 q[]

我还能如何处理 q[] 以便它替换值而不是多次复制它?

4

1 回答 1

1

编辑(编辑后)

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 回答