我的应用中有一个搜索功能,我搜索公司,结果是适合所有公司名称和相关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获取关联对象而不是创建单独的类别数组?
答案 0 :(得分:0)
关于根据名称加载公司的初始问题,以及与公司的类别,我将使用包括ActiveRecord选项。
BGRA
每个加载的公司都会加载其primary_categories。