是否可以使用 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 %>
我有一个 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 %>