Ransack搜索多个班级

时间:2018-04-13 09:14:38

标签: ruby-on-rails ruby ruby-on-rails-5 ransack

我有一个使用Ransack构建的工作搜索表单,其中包含两个不同类的搜索字段,如下所示:

<%= search_form_for @q do |f| %>
 <%= f.label :tags_id_in, 'Tags' %>
 <%= f.select :tags_id_in, Tag.all.map{ |u| [u.name, u.id] }, { include_blank: "Tags" } %>

 <%= f.label :sector_id_eq, 'Sector' %>
 <%= f.select :sector_id_eq, Sector.all.map { |w| [w.name, w.id] }, {include_blank: 'Any'} %>

 <%= f.submit "Search" %>           
<% end %>

每个类都链接到公司类

class Company < ApplicationRecord
 belongs_to :sector

 has_many :company_tags
 has_many :tags, through: :company_tags
 accepts_nested_attributes_for :company_tags
end

我正在尝试将两个选择字段合并为一个。到目前为止,我可以为此构建视图:

<% combined = Sector.all + Tag.all %>
<%= f.select :combined, combined.map { |w| [w.name, w.id] }.sort, {include_blank: 'Any'} %>

虽然上述内容适用于显示单个搜索表单,但它没有任何功能。有人能帮忙吗?提前致谢。

2 个答案:

答案 0 :(得分:1)

Hooray,Ransack。看起来2013年的答案仍然有效: Search multiple models at once with Ransack

但如果您喜欢冒险,可以试试这个: https://github.com/activerecord-hackery/ransack/issues/131

  

您可以添加关联&#39;列/搜索到属性列表,方法是通过:associations选项将其名称传递给#attribute_select。

答案 1 :(得分:0)

我不熟悉ransack,但也许值得创建一个新的替身课程?只是一个PORO(普通ol&#39; ruby​​对象)中间视图和模型,使用ransack进行查询而不是直接从表单中调用它们。您也可以在该对象中构建标记列表。

您的视图中有很多逻辑,很多人对将ActiveRecord查询放在那里感到不满。表单对象可以解决这个问题,同时保持控制器的简单性。