私のアプリには、データベース内のすべてのプロジェクトをレンダリングするページがあります。私が望むのは、たとえば、ユーザーがメンバーになっている 1 回だけを表示するなど、結果をフィルター処理できるようにすることです。
以下は、まさにそれを行いたいプロジェクトコントローラーからのものです(ユーザーがメンバーであるプロジェクトのみを表示します)。まず、user_id が見つかった「ProjectUser」からすべてのプロジェクトを取得します。次に、この配列を使用して、@user_is_member.project_id を使用して、テーブル 'Projects' から関連するすべてのプロジェクトを取得します。
すべてではなく 1 つのプロジェクトしか得られないため、これは機能しません。
コードを変更して、目的を達成するにはどうすればよいですか?
コード:
@user_is_member = ProjectsUser.where(:user_id => current_user.id)
@user_is_member.each do |member|
@projects = Project.where(:id => member.project_id)
end
テーブル:
プロジェクト_ユーザー:
project_id
user_id
プロジェクト:
id
...non relevant fields...
モデル:
ユーザーモデル:
class User < ActiveRecord::Base
has_many :project_users
has_and_belongs_to_many :projects
end
プロジェクト モデル:
class Project < ActiveRecord::Base
has_and_belongs_to_many :users # => , :class_name => 'User'
belongs_to :user
end
ProjectUser モデル:
class ProjectsUser < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
注: current_user は、現在ログインしているユーザーです (「id」などのすべてのユーザー フィールドにアクセスできます)。