这是一个查询:
@projects = @user.projects.includes(:company => :workers)
在我看来,我想通过属于公司的tags订购这些项目的清单。
因此,属于公司urgent
标记的项目首先是elevated
,然后是@companies
,然后是所有其他项目。
我认为一种方法是定义@urgent = @companies.tagged_with('urgent')
@elevated = @companies.tagged_with('elevated')
@others = @companies.tagged_with('urgent', 'elevated', :exclude => true)
# view:
@urgent.each do |u| ... end
@elevated.each do |e| ... end
@others.each do |o| ... end
,然后定义:
@companies = @projects.collect{|p| p.company}
当第一个查询是我在顶部显示的查询时,如何将所有公司收集在一起? {{1}}生成一个不可搜索的数组。
答案 0 :(得分:0)
我不认为你可以不使用2个查询就可以做到这一点。
@projects = @user.projects.includes(:company => :workers)
@companies = Company.find(@projects.collect(&:id))
至于渲染标签,您可以这样做:
ordered_tags = ['urgent', 'elevated']
ordered_tags.each do |tag|
@companies.tagged_with(tag).each do |company|
my_render_logic
end
end
@companies.tagged_with(*ordered_tags, :exclude => true).each do |company|
my_render_logic
end