修改param键以在控制器中使用两次查询

时间:2013-01-01 22:50:57

标签: ruby-on-rails ransack

我正在使用Ransack在我的应用上运行搜索。我有一个用户输入文本的搜索栏,文本被传递到搜索控制器,我在两个表中搜索查询:帖子和组

问题是我想分别在:name:title上为群组和帖子运行查询,然后在同一页面上提供这两组结果。搜索表单使用:name_cont,所以我试图复制此表单发送给控制器的哈希值,并在我在帖子上运行相同的搜索时将密钥更改为:title_cont。

请不要犹豫要求澄清。

搜索控制器

class SearchController < ApplicationController
  def index
    @q = Group.search(params[:q])
    @groups = @q.result
    @group_count = @groups.count

    #query = params[:q][:name_cont]
    posthash = { :q => {:title_cont => params[:q][:name_cont]} }
    @q = Post.search(posthash)
    @posts_results = @q.result(:distinct => true)
    @post_count = @posts.count

  end
end

搜索表单

=search_form_for @q, :url => { :controller => "search", :action => "index" }do |f|
  =f.text_field :name_cont
  =f.submit 'search'

产生错误:

undefined method `name_cont' for #<Ransack::Search:0x007fc0f798df18>

更新1:

class SearchController < ApplicationController
  def index
    @q = Group.search(params[:q])
    @groups = @q.result
    @group_count = @groups.count

    #I am trying to take the query, i.e. the "value" in params[:q]
    #and pass it into a new hash to use as a parameter in 'search'
    posthash = { :q => {:title_cont => params[:q][:name_cont]} }

    @q2 = Post.search(posthash)
    @posts_results = @q2.result(:distinct => true)
    @post_count = @posts.count

  end
end

1 个答案:

答案 0 :(得分:1)

您要覆盖@q来搜索帖子,这些帖子会响应标题而不是名称,最终搜索表单会获得一个没有name_conttitle_cont的对象相反,所以你需要使用另一个变量名来搜索@q以外的帖子。