【发布时间】:2020-10-21 14:00:39
【问题描述】:
我有三个表:User through devise、Project 和 ProjectUser。
User 可以是许多Project 到ProjectUser 的表的一部分。如何查询Project 的索引操作显示当前用户已创建并属于其中的项目?
假设我有三个项目和两个团队成员:
- 用户 1 已创建并且是项目 A 的成员
- 用户 2 已创建并且是项目 B 的成员
- 用户 2 已创建并且是项目 C 的成员
- 用户 1 是项目 C 的成员
当我以以下身份登录时:
- 用户 1,我应该可以同时看到项目 A 和 C。
- 用户 2,我应该可以同时看到项目 B 和 C。
这是我的模型、控制器和架构:
projects_controller.rb
@projects = current_user.projects.joins(:project_users).distinct.order("created_at DESC")
项目.rb
class Project < ApplicationRecord
has_many :project_users
has_many :users, through: :project_users
end
user.rb
class User < ApplicationRecord
has_many :project_users
has_many :projects, through: :project_users
end
project_user.rb
class ProjectUser < ApplicationRecord
belongs_to :user
belongs_to :project
end
schema.rb
create_table "project_users", force: :cascade do |t|
t.bigint "user_id", null: false
t.bigint "project_id", null: false
t.datetime "created_at", precision: 6, null: false
t.datetime "updated_at", precision: 6, null: false
t.index ["project_id"], name: "index_project_users_on_project_id"
t.index ["user_id"], name: "index_project_users_on_user_id"
end
【问题讨论】:
标签: ruby-on-rails postgresql activerecord rails-activerecord