使用:包含变量和进一步查询

时间:2012-01-18 11:15:39

标签: ruby-on-rails ruby-on-rails-3 activerecord

这是一个查询:

@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。我如何首先获得@公司?

当第一个查询是我在顶部显示的查询时,如何将所有公司收集在一起? {{1}}生成一个不可搜索的数组。

2。显示项目比使用三个循环有更优雅的方式吗?

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