我在Rails中有以下关联:
公司has_many用户通过会员资格
然后在会员资格中我有以下内容:
belongs_to :company
belongs_to :user
validates_uniqueness_of :company_id, scope: user_id
所以,想象一下我有以下内容:
company = Company.create
我有一种方法可以将用户添加到公司,例如:
def add_user(user)
users << user
end
如何确保用户尚未与公司相关,以避免引发验证异常?
现在我正在做这个user << user unless users.include?(user)
,但我想知道是否有更多的Rails方式这样做。
答案 0 :(得分:0)
您可以使用匿名模块扩展控制对关联的访问的代理对象,以防止重复:
class Company
has_many :users, through: :memberships do
def <<(*users)
super(*users - proxy_association.owner.users)
end
end
end
您可以在文档中阅读有关Active Record Association Extensions的更多信息: