检查Rails中是否存在关联记录?

时间:2015-02-07 07:07:35

标签: ruby-on-rails validation

我在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方式这样做。

1 个答案:

答案 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的更多信息:

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#module-ActiveRecord::Associations::ClassMethods-label-Association+extensions