gpt4 book ai didi

mysql - Rails ActiveRecord 关联

转载 作者:行者123 更新时间:2023-11-29 12:23:41 24 4
gpt4 key购买 nike

对于初学者的问题,我深表歉意,但我正在尝试将我的注意力集中在我要启动的项目的 ActiveRecord 关联上。

我开始扩展我在 Rails 方面的知识,但我对可用的 ActiveRecord 关联有点困惑,这就是我应该选择哪一个以及如何构建模型。

这是一般概念:

  • 您首先要定义一个公司 - 这是树的第一部分
  • 其次,您需要定义部门。它们应该属于相关公司,并有简单的名称和描述。
  • 最后 - 员工 - 每位员工都可以在一个部门并隶属于一家公司。

我正在寻找的是为公司、部门和员工创建模型的最佳方法,这样我就可以将员工分配到正确的公司和部门。

如果您能为我指明正确的方向,请阅读书籍或教程/文章来简化我脑海中的这些数据库表连接,并为项目选择正确的路线!

感谢任何帮助!

最佳答案

看起来很简单。

您的公司模型应显示以下内容:

has_many :departments
has_many :employees

有人可能会说你可以将员工更改为“has_many :employees, through: :departments”。我不认为这有太大影响。

您的部门模型应该具有:

belongs_to :company
has_many :employees

您的员工模型应该具有:

belongs_to :company
belongs_to :department

如果您使用直通部门来建立该关系,那么从技术上讲,您不需要公司线路。但如果你这样做,你就可以运行如下命令:

员工.first.公司员工.first.部门

部门.first.业务Department.first.employees.first(注意这是复数,因为它是 has_many)

Company.first.employees.first(如果您有直通或直接分配它,则有效)公司.first.部门.first

“belongs_to”关系意味着模型声明它拥有其所属模型的外键。因此,部门属于公司。因此,当您键入(例如)railsgenerate model Department company:references.... 等时,:company_id 会在 Department 内部创建。

在上面的示例中,您的员工将有一个 :department_id 和一个 :company_id,不过,您可以再次跳过公司 ID,只需将其声明为直通车,然后您将通过员工所在的部门查找员工.

理论上,您也可以对员工使用 has_one 而不是belongs_to。但我发现那些更难合作。

关于mysql - Rails ActiveRecord 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28652779/

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