gpt4 book ai didi

ruby-on-rails - 限制 has_many 关系中关联数量的最佳实践?

转载 作者:数据小太阳 更新时间:2023-10-29 07:26:35 26 4
gpt4 key购买 nike

假设我有两个模型——用户和帐户。每个账号最多可以关联n个用户,一个用户只能关联一个账号。

说用户似乎很自然

belongs_to :account

和帐户

has_many :users

但是,在通过 has_many 声明限制关联数量时,我不清楚最佳实践。我知道有一个 :limit 参数,但这只限制了返回的关联数量,而不是能够存在的数量。

我怀疑答案是使用类似 :before_add 的东西。但是,该方法似乎仅适用于通过 << 创建的关联。所以它会在你使用时被调用

@account.users << someuser 

但如果你用过就不会

@account.users.create

我还考虑过在 User 模型中使用 before_save 实现限制可能更实际,但在 User 模型中实现 Account 业务规则似乎有点偏离。

限制关联数量的最佳做法是什么?

编辑:每个帐户的 n 个用户将是一些存储在个人帐户中的业务数据,而不是在代码中随意 float 的直接魔数(Magic Number)。

最佳答案

首先,如果你的users表有外键account_id那么你需要使用

class User
belongs_to :account
end

通过这种方式,您将确保用户只能关联到一个帐户。

如果你想限制该帐户可以有,例如最多 3 个用户,那么您可以定义以下验证:

class User
validates_each :account do |user, attr, value|
user.errors.add attr, "too much users for account" if user.account.users.size >= 3
end
end

因此,如果帐户已经有 3 个用户,您将无法为帐户创建新用户。

关于ruby-on-rails - 限制 has_many 关系中关联数量的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/292403/

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