1

私はこの関係を持っている:Rails 3:組織の関係にあるユーザーの同僚ですか?

class Organization < ActiveRecord::Base 
    has_many :users 
end 

class User < ActiveRecord::Base 
    belongs_to :organization 
end 

そして、私は(同じ組織に参加している、すなわち人)、ユーザの同僚を収集したいと思います。

簡単な方法は、このようなメソッドを記述するために、次のようになります。

def coworkers 
    organization ? organization.users - [self] : [] 
end 

しかし、私は考え始めたと私はhas_manyの関係を介してこれを行うことができますように感じました。

私はこれをやって終了:除くだけで正常に動作している

class User < ActiveRecord::Base 
    belongs_to :organization 
    has_many :coworkers, :through => :organization, :source => :users 
end 

は、ユーザーが同僚に含まれます。私が今知りたいのですがどのような

は次のとおりです。私はこれを達成するための良い方法を行ったよう

  • は、メソッドを定義していますか?
  • 実際のメソッドを定義せずに実際にユーザーを除外することなく、has_manyやその他の関係を使用してこれを実現する方法はありますか?
  • クエリのパフォーマンス、キャッシング、または私が気づいていない重要なポイントに関して最適なものはどれですか?

ありがとう!

答えて

0

@ davidb:あなたの答えはほぼ正しいですが、条件のIDはuser.coworkersを呼び出すときに評価されたID(ユーザーのもの)ではありません。

これは移動するための方法である:

has_many :coworkers, :through => :organization, :source => :users, :conditions => lambda { ["users.id != ?", self.id] } 
3

リレーションシップに:conditionsオプションを追加すると、現在のユーザーを除外できます。例:

has_many :co_workers, :through => :organization, :source => :users, :conditions => ["user_id != ?", id] 

これはあなたのために行う必要があります。

+0

は、更新を参照してください.... – davidb

関連する問題