我正在尝试构建一个显示类别列表的页面。当您单击其中一个时,您将进入同一页面,但现在使用您刚刚选择的类别的新查询字符串。然后,您可以选择另一个类别,允许它们堆叠。 URL最终可能如下所示。
http://localhost:3000/filter?categories%5B%5D=restaurant&categories%5B%5D=takeout
在我的Rails视图中,我使用link_to
来构建这些网址。如果查询字符串中没有现有类别,我只需在问题永久链接中传递类别符号和类别的单个数组。当存在现有类别时,我想将新类别插入request.query_parameters
类别数组中,然后将其与request.query_parameters整体合并。这样我将来也可以有子类别和订单/排序查询。
<% @categories.each do |category| %>
<% if !params.has_key?(:categories) %>
<%= link_to category.category_name, shops_path(categories: [category.permalink]) %>
<% else %>
<%= link_to category.category_name, shops_path(request.query_parameters.merge(request.query_parameters[:categories] << category.permalink)) %>
<% end %>
<% end %>
然后,我将使用永久链接在我的数据库中搜索具有匹配永久链接的类别,并显示与URL中查询字符串中的至少一个类别匹配的结果。
点击第一个链接会为以下网址中的request.query_parameters创建这样的哈希。
{"categories"=>["restaurant"]}
http://localhost:3000/filter?categories%5B%5D=restaurant
我会从第二个开始,就像从下面的URL创建一个这样的哈希。
{"categories"=>["restaurant","takeout"]}
http://localhost:3000/filter?categories%5B%5D=restaurant&categories%5B%5D=takeout
但是,我收到以下错误消息。
undefined method `to_hash' for ["restaurant", "takeout"]:Array
Did you mean? to_h
Request
Parameters:
{"categories"=>["restaurant", "takeout"]}
如何解决此错误?
修改
找到了解决方案,所以将其作为答案发布。
答案 0 :(得分:0)
查看您编写的日志和代码,您正在尝试将哈希合并到类别数组中,这不是正确的方法。
修改代码如下:
<%= link_to category.category_name, shops_path(request.query_parameters[:categories] << category.permalink) %>
上面一行将推送类别数组中的新类别,当在控制器中接收查询参数时,附加类别将合并到请求参数中。
答案 1 :(得分:0)
我找到了解决方案。如果您没有DbNull.Value
哈希中的密钥,则只需要将数组与categories:
的密钥合并。如果您已经拥有该密钥,则可以使用request.query_parameters
添加新的category.permalink
。
因此,解决方案已扩展到三个条件。
+=
categories:
希望这将有助于其他人!
categories: