如何处理2种不同类型的关联与相同的表在rails?



我正在创建我的第一个rails应用程序,并且在这一点上停留了很长时间。所以我的项目中有两个模型。

  1. 用户(通过设计gem创建)

这两种模型之间存在两种关联。由于每个项目可以有多个开发人员,因此我在用户和项目之间创建了has_and_belongs_to_many关联。每当我需要添加开发人员时,只需执行@project.users << current_user

还有另一个关联,这个关联是一对多关联。创建它是为了跟踪每个项目的经理,每个项目只能有一个经理。因此,我在项目表中添加了一个名为manager_id的外键,其中manager_id引用了用户模型中的记录。

现在我想问我如何添加,删除和检索每个项目的这个管理器。如果我做@project.manager << current_user,我得到一个错误消息,没有名为manager的方法,如果我做@project.users << current_user,我认为它会被添加到has_and_belongs_to_many关联。

目前我的用户模型是这样的

class User < ApplicationRecord
has_many :projects, foreign_key :manager_id
has_and_belongs_to_many :projects 
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
end

我的项目模型是这样的:

class Project < ApplicationRecord
belongs_to :users, foreign_key :manager_id
has_and_belongs_to_many :users
end

按照Stefanyuk Yuriy所说的步骤,然后从其他资源中获得帮助,我终于能够解决这个问题。我像这样修改了我的模型类

User.rb:

class User < ApplicationRecord
has_many :projects_as_project_manager, class_name: 'Project', foreign_key: :manager_id
has_and_belongs_to_many :projects
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
end

Project.rb:

class Project < ApplicationRecord
belongs_to :project_manager, class_name: 'User', foreign_key: :manager_id
has_and_belongs_to_many :users
end

不能有两个同名的关联

你必须重命名一个关联

例如

class User < ApplicationRecord
has_many :manager_projects, class_name: 'Project', foreign_key :manager_id
has_and_belongs_to_many :projects 
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
end
class Project < ApplicationRecord
belongs_to :manager, class_name: 'User', foreign_key :manager_id
has_and_belongs_to_many :users
end

相关内容

  • 没有找到相关文章

最新更新