Rails 3.1 - 通过belongs_to关联的多个对象的范围?

时间:2012-01-03 11:04:57

标签: activerecord ruby-on-rails-3.1 scope belongs-to

class Item < ActiveRecord::Base
  belongs_to :account
  belongs_to :category
end

class Category < ActiveRecord::Base
  belongs_to :account
  has_many :items
end

我想做以下事情:

@items = @account.items.where(...)
@categories = @items.categories.order(...)

@items.categories应通过@items关联获取belongs_to的所有类别。我提出的最好的是:

@categories = @items.map{|item| item.category }

但是没有管理这个的余地吗?

1 个答案:

答案 0 :(得分:0)

由于您希望通过项目来查看帐户中的类别,我认为您可以执行类似

的操作

has_many :categories, :through => :items

在您的Account模型中,然后只需致电account.categories

另外,对于记录,你在那里做的map会进行n + 1次查询(它应该类似于@categories = @items.includes(:category).map{...}