gpt4 book ai didi

ruby-on-rails - rails 与 has_many 的错误关联

转载 作者:行者123 更新时间:2023-12-02 06:54:55 24 4
gpt4 key购买 nike

我尝试在用户和项目之间建立一个基本的关联:

用户.rb

class User < ActiveRecord::Base
has_many :projects, foreign_key: 'owner_id'
has_many :project_members, through: :project_members
end

项目.rb

class Project < ActiveRecord::Base
has_many :project_members, dependent: :destroy
has_many :users, through: :project_members
end

项目成员.rb

class ProjectMember < ActiveRecord::Base
belongs_to :user
belongs_to :project
end

我的 project_members 表:

+----+------------+---------+
| id | project_id | user_id |
+----+------------+---------+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
+----+------------+---------+

和我的项目表:

+----+-------+----------+
| id | name | owner_id |
+----+-------+----------+
| 1 | test1 | 1 |
| 2 | test2 | 2 |
+----+-------+----------+

为什么我喜欢

current_user.projects

只有 projects.owner_id = current_user.id 的项目而不是用户是成员的项目?

但我认为这是错误的一面,我试图获取我想要的数据。我在项目 Controller 获取数据的/projects 上。我想我应该使用类似的东西:

class ProjectsController < ApplicationController
# GET /projects
def index
@projects = Project.all
end
end

但是我如何才能只获得 current_user.id 所属的项目?

最佳答案

我认为您应该将其设置得稍微不同:

class User < ActiveRecord::Base
has_many :owned_projects, class_name: "Project", foreign_key: 'owner_id', dependent: :restrict_with_error
has_many :project_members, dependent: :destroy
has_many :projects, through: :project_members
end

class Project < ActiveRecord::Base
has_many :project_members, dependent: :destroy
has_many :users, through: :project_members

belongs_to :owner, class_name: "User"
end

为了获取当前用户所属的所有项目,您可以执行以下操作:

current_user.projects

为了获得当前用户拥有的所有项目,你可以这样做:

current_user.owned_projects

关于ruby-on-rails - rails 与 has_many 的错误关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33316157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com