加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:50:05 所属栏目:百科 来源:网络整理
导读:假设我有两个模型 – 用户和帐户.每个帐户最多可以有n个与之关联的用户,而用户只能与一个帐户关联. 用户说,这似乎很自然 belongs_to :account 和帐户 has_many :users 但是,在通过has_many声明来限制关联数量时,我不清楚最佳实践.我知道有一个:limit参数,但
假设我有两个模型 – 用户和帐户.每个帐户最多可以有n个与之关联的用户,而用户只能与一个帐户关联.

用户说,这似乎很自然

belongs_to :account

和帐户

has_many :users

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

我怀疑答案是使用类似:before_add.但是,这种方法似乎只适用于通过<<<< .所以当你使用时它会被调用

@account.users << someuser

但如果你使用的话就没有

@account.users.create

我还认为在User模型中使用before_save实现限制可能更实际,但似乎在User模型中实现Account业务规则有点偏差.

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

编辑:每个帐户的n个用户将是存储在各个帐户中的一些商业数据,而不是在代码中无处不在的直接幻数.

解决方法

首先,如果您的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个用户,您将无法为帐户创建新用户.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读