【问题标题】:Check if record exist in association in Rails?检查Rails中是否存在关联记录?
【发布时间】:2015-02-07 07:07:35
【问题描述】:

我在 Rails 中有以下关联:

公司通过会员拥有_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 &lt;&lt; user unless users.include?(user),但我想知道是否有更多的 Rails 方式这样做。

【问题讨论】:

    标签: ruby-on-rails validation


    【解决方案1】:

    您可以使用匿名模块扩展控制对关联的访问的代理对象以防止重复:

    class Company
      has_many :users, through: :memberships do
        def <<(*users)
          super(*users - proxy_association.owner.users)
        end
      end
    end
    

    您可以在文档中阅读有关 Active Record 关联扩展的更多信息:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2013-08-07
      • 2012-05-08
      • 1970-01-01
      相关资源
      最近更新 更多