如何从多对多的关系中为某个对象编写范围?

时间:2012-01-28 04:01:24

标签: ruby-on-rails scope many-to-many

我需要编写一个范围,我将传递用户的ID,并将从users表中收集该用户的所有公司的所有用户列表关联。

在User.rb中:

has_many :employments
has_many :companies, :through => :employments, :dependent => :destroy
...

在Employment.rb中:

belongs_to :user
belongs_to :company

在Company.rb中:

has_many :employments
has_many :users, :through => :employments, :dependent => :destroy

这可以通过以下方式实现:

current_user.companies.each{|c| c.users.each {|u| u}}

但是这样写我认为更耗时。

1 个答案:

答案 0 :(得分:1)

以下(未测试)范围查找给定用户工作的所有公司。

class Company
  has_many :employments
  has_many :users, :through => :employments, :dependent => :destroy

  scope :with_user, lambda { |user_id| joins(:employments).where(:user => user_id) }
  ...

运行rails c并执行try Company.with_user(User.last!.id),看看会发生什么。