【问题标题】:Multiple relations between two models in RailsRails 中两个模型之间的多重关系
【发布时间】:2015-09-02 20:00:50
【问题描述】:

我在 Rails 中有一个模型用户和项目。一个项目有一个所有者(用户)和多个在它上面工作的人(用户)。 这个模型我试过了

class Project < ActiveRecord::Base
  belongs_to :owner, class_name: "User"
  has_many :users

end

class User < ActiveRecord::Base
  has_secure_password

  has_many :projects
end

但随后无法将值放入记录中以进行关联。有人可以建议我该怎么做。 (我需要获取用户拥有的项目,在哪些项目上工作。项目的所有者和在其中工作的人) 谢谢

【问题讨论】:

  • 这让我觉得是“has_and_belongs_to_many”关系。

标签: ruby-on-rails ruby ruby-on-rails-4 model-view-controller


【解决方案1】:

设计模型的一种方法是拥有一个单独的ProjectOwnerProjectUser 模型,它们都继承自User 模型。 并且在ProjectProjectUser 模型之间有has_and_belongs_to_many 关联。

class Project < ActiveRecord::Base
  belongs_to :project_owner
  has_and_belongs_to_many :project_users
end

class User < ActiveRecord::Base
  has_secure_password
  # other common attributes here
end

class ProjectOwner < User
  has_many :projects
end

class ProjectUser < User
  has_and_belongs_to_many :projects
end

在您的projects 表中添加project_owner_id 列。

创建一个连接表project_users_projects,如下所示:

create_table :project_users_projects, id: false do |t|
  t.belongs_to :project_user, index: true
  t.belongs_to :project, index: true
end 

然后,您将能够执行以下操作:

project_owner = project.project_owner
project_owner_projects = project_owner.projects
project_user_projects = project_user.projects
project_users = project.project_users

【讨论】:

  • 如何向其中添加数据并从中提取数据。抱歉,我刚开始使用 ruby​​
  • @HARSHILGOEL 看看我更新的答案。如果您有任何其他问题,请告诉我。
  • 我必须使用 rails generate model users_projects 创建连接表,对吧?然后添加到 users_project 的模型中属于 user , project
  • 您不需要模型。你只需要users_projects。当您创建 usersproject 表时,这可能是您迁移的一部分。请参阅此处的示例:guides.rubyonrails.org/…
  • 那么,我在两者中创建表还是仅在用户中创建表?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多