在rails中使用Ransack来搜索公司和相关类别

时间:2016-12-18 08:05:36

标签: ruby-on-rails ransack

我的应用中有一个搜索功能,我搜索公司,结果是适合所有公司名称和相关primary_categories的公司。

我正在使用ransack抓住相关公司。

公司和PrimaryCategories有一个has_many_and_belongs_to_many关联。我正在重构代码以从返回的公司中获取相关的主要类别。

以下是更改前的方法。

def search
  @q = Company.ransack(name_cont: params[:q][:name], keywords_name_cont: params[:q][:name], m: 'or')
  @companies = @q.result.uniq
  @q2 = PrimaryCategory.ransack(name_cont: params[:q][:name])
  @categories = @q2.result.uniq
  @search_term = params[:q][:name]
end

在搜索结果页面上,我可以检索该公司但主要类别为空,因为我正在返回一个空数组对象。

我正在寻找一种从返回的公司中提取关联的primary_categories的简洁方法

我重写了上面的方法来包含一个数组对象。

def search
  @q = Company.ransack(name_cont: params[:q][:name], keywords_name_cont: params[:q][:name], m: 'or')
  @companies = @q.result.uniq
  @categories = []
  @search_categories = @companies.each {|co| @categories << co.primary_categories}
  @categories.flatten!.uniq
  @search_term = params[:q][:name]
end

这有效但我想知道我是否可以使用ransack获得相同的结果。是否有更有效的方法使用ransack获取关联对象而不是创建单独的类别数组?

1 个答案:

答案 0 :(得分:0)

关于根据名称加载公司的初始问题,以及与公司的类别,我将使用包括ActiveRecord选项。

BGRA

每个加载的公司都会加载其primary_categories。