gpt4 book ai didi

ruby-on-rails - has_one和has_many在同一模型中。 rails 如何跟踪它们?

转载 作者:行者123 更新时间:2023-12-04 04:43:38 25 4
gpt4 key购买 nike

即使工作正常,我还是有些困惑。我有一个模型,该模型具有与同一其他模型的两个关联。

公司有一个所有者,公司有许多此类用户的员工。

这是我的公司模型:

class Company < ActiveRecord::Base
validates_presence_of :name

has_many :employee, :class_name => 'User'
has_one :owner, :class_name => 'User'
accepts_nested_attributes_for :owner, :allow_destroy => true
end

这是我的用户模型:
class User < ActiveRecord::Base
include Clearance::User
attr_accessible :lastname, :firstname #other attr are whitelisted in clearance gem
validates_presence_of :lastname, :firstname
belongs_to :company
end

现在假设我有该公司的3名员工,包括所有者。首次创建公司时,我将所有者设置为ID为1的员工,并通过设置其company_id(user.company = company)将另外两个(2,3)添加到员工列表中。这三个公司都将他们的company_id设置为公司ID,我们可以假设其为1

当我要求company.owner时,我会找到合适的用户;当我要求company.employee时,我会同时获得全部三个。

如果将所有者更改为用户2,则通过将其company_id设置为nil来自动从员工中删除用户1。很好,如果我把他加回去当一个简单的雇员,那一切仍然很好。

rails 怎么知道哪个是哪个?我的意思是怎么知道一个雇员是所有者,而不仅仅是雇员?架构中没有任何东西对此进行定义。

我有一种感觉,我应该撤消所有者协会,并使公司成为用户。

最佳答案

就像您现在拥有的一样,没有什么可区分所有者和员工的。这意味着一旦您开始搬迁人员或尝试更改所有权,您将遇到问题。

正如François所指出的,您只是幸运地发现所有者是属于ID最低的公司的用户。

为了解决这个问题,我将在以下方面介绍我的模型。

class Company < ActiveRecord::Base
belongs_to :owner, :class_name => "user"
has_many :employees, :class_name => "user"
validates_presence_of :name
accepts_nested_attributes_for :owner, :allow_destroy => true
end

class User < ActiveRecord::Base
include Clearance::User
attr_accessible :lastname, :firstname #other attr are whitelisted in clearance gem
validates_presence_of :lastname, :firstname
belongs_to :company
has_one :company, :foreign_key => :owner_id
end

您必须在“公司”表中添加另一个名为owner_id的列,但这将更清楚地定义您的关系。并且将避免与更改所有者相关的任何麻烦。请注意,如果您走这条路线并设置了数据库,则user.company_id和company.owner_id都不能为空,这可能存在周期性依赖性。

我不太确定accepts_nested_attributes_for在belongs_to关系中的表现如何。

关于ruby-on-rails - has_one和has_many在同一模型中。 rails 如何跟踪它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1480631/

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