0

WorkSpace、Project、User、および Membership モデルがあります。ユーザーは多くのメンバーシップを持ち、メンバーシップを通じて多くのプロジェクトを持っています。プロジェクトはワークスペースに属します。

ユーザー プロジェクトの取得は非常に簡単です。

user.projects

しかし、作業スペースを確保するために手を伸ばすのは難しいものです。このようなものは のエラーを引き起こしますundefined method spaces for collection proxy

user.projects.work_spaces.unique

ユーザーが関与している一意の作業スペースのセットを取得するにはどうすればよいですか? (ユーザーがメンバーシップを通じて所属するプロジェクトを含むワークスペース)。

4

2 に答える 2

2

ActiveRecord を使用している場合は、冗長なコードと .collect(&:work_spaces).flatten.uniq のパフォーマンスの低下を避けるために、関連付けメソッドを活用することをお勧めします。

class User < ActiveRecord::Base
  has_many :memberships
  has_many :projects, through: :memberships
  has_many :work_spaces, through: :projects
end

を求めることができますuser.work_spaces

于 2013-08-12T21:55:00.420 に答える
1

user.projectswork_spacesプロジェクトのコレクションであるため、直接呼び出すことはできません。

Enumerable のcollectメソッド (またはmap) を使用してすべてのコレクションを取得し、重複を取り除くことができます。

user.projects.collect(&:work_spaces).flatten.uniq
于 2013-08-12T20:46:03.187 に答える