是否可以使用Ransack从同一文本字段中搜索模型及其关联?

时间:2015-11-26 14:50:03

标签: ruby-on-rails ransack

我有个人资料模型和出版物模型。

class Profile < ActiveRecord::Base
  has_many :publications
end

class Publication < ActiveRecord::Base
  belongs_to :profile
end

我正在使用Ransack gem对我的个人资料模型执行搜索:

class ProfilesController < ApplicationController
  def index
    @search = Profile.search(params[:q])
    @profiles = @search.result
  end
end

简档/ index.html.erb

<%= search_form_for @search do |f| %>
  <%= f.label :name_cont, "Search term:" %>
  <%= f.text_field :name_cont %>
<% end %>

这可以按预期工作。

我使用相同的表单对相关的发布模型执行搜索。

根据Ransack's documentation,我可以这样做:

class ProfilesController < ApplicationController
  def index
    @search = Profile.search(params[:q]).includes(:publications)
    @profiles = @search.result
  end
end

<%= search_form_for @search do |f| %>
  <%= f.label :publications_title_cont, "Search term:" %>
  <%= f.text_field :publications_title_cont %>
<% end %>

这也有效。

我的问题:是否可以合并两个文本字段?我想从同一文本字段中搜索Profile模型和Publication模型。

我试过了:

<%= search_form_for @search do |f| %>
  <%= f.label :name_cont_or_publications_title_cont, "Search term:" %>
  <%= f.text_field :name_cont_or_publications_title_cont %>
<% end %>

但是这给了我以下错误:

undefined method `name_cont_or_publications_title_cont' for #<Ransack::Search:0x007f7688db1b80>

我错过了什么?

1 个答案:

答案 0 :(得分:2)

从内存中我认为你只需要在最后设置后缀,因为你无论如何都不能组合不同的后缀:

<%= f.text_field :name_or_publications_title_cont %>