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

Is it possible to search against a model and its association from the same text field using Ransack?

我有一个 Profile 模型和一个 Publication 模型。

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

profiles/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>

我错过了什么?

根据记忆,我认为你只需要在最后加上后缀,因为无论如何你都不能组合不同的后缀:

<%= f.text_field :name_or_publications_title_cont %>