如何使用meta_search在同一页面中进行两次搜索?

时间:2011-12-30 06:10:26

标签: ruby-on-rails meta-search

我在页面中有两个列表,一个用于model_1,另一个用于model_2。当我单击列meta_search的sort_link时,发送参数“search [meta_sort] = column_name.asc”。问题出在控制器中,因为这两个模型使用相同的搜索参数进行过滤:

#in the controller
@search_for_model_1 = Model1.search(params[:search])
@model_1s = @search_for_model_1.all

@search_for_model_2 = Model2.search(params[:search])
@model_2s = @search_for_model_2.all

#in the view
<%= sort_link @search_for_model_1, :name %>
<%= sort_link @search_for_model_2, :name %>

sort_links在不同的html表中,一个显示model_1字段,另一个显示model_2字段,当我点击任何列名链接时,我在控制器中得到的参数是params [:search],我没办法知道是否从model_1或model_2 html表中单击了列链接。

我想在控制器中更改参数名称“search”,例如“search_for_model_name”:

#in the controller
@search_for_model_1 = Model1.search(params[:search_for_model_1])
@model_1s = @search_for_model_1.all

@search_for_model_2 = Model2.search(params[:search_for_model_2])
@model_2s = @search_for_model_2.all

我找不到使用meta_search提供的辅助方法sort_link来更改param名称的方法。或者有不同的方式来做到这一点?

3 个答案:

答案 0 :(得分:1)

sort_link使用:as选项,就像form_for

一样
<%= form_for @search, :as => :q do |f| %>

<%= sort_link @search, :field, :as => :q

@search = Model.metasearch(params[:q])

为每个模型使用不同的名称。

答案 1 :(得分:0)

很可能你只是做这样的事情

:search_for_model_2 => :search_field

但如果没有看到你的观点,我无法肯定地说。

答案 2 :(得分:0)

graywh的答案不适用于sort_link,这是正确的解决方案:

#in the controller
@search_for_model_1 = Model1.search(params[:model_1], :search_key => :model_1)

@search_for_model_2 = Model2.search(params[:model_2], :search_key => :model_2)