2012-01-28 13 views
2

私はユーザーのIDを渡すスコープを書く必要があり、usersテーブルからそのユーザーのすべての企業に関連するすべてのユーザーのリストを収集します。 User.rbで多対多リレーションシップからオブジェクトのスコープを作成するにはどうすればよいですか?

:Employment.rbで

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

:Company.rbで

belongs_to :user 
belongs_to :company 

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

これは、のようなものを使用して実現できます

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

このような書き込みは、はるかに時間がかかると思います。

+0

User.last!.companiesを実行するとどうなりますか? –

答えて

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 cCompany.with_user(User.last!.id)を試してみて、何が起こるか見て実行します。

関連する問題