在已存在的集合中添加对象时引发异常

Mat*_*hew 2 activerecord ruby-on-rails

我正在使用<<将对象添加到集合中

current_user.followers<<users
Run Code Online (Sandbox Code Playgroud)

当用户中的用户已存在于关注者集合中时,我想捕获异常.我怎样才能做到这一点?

谢谢.

PS.通过输入"<<"在Google上找到结果真的很难,是否有名称来调用此方法?

bad*_*wym 7

您可以覆盖<<关注者关联的方法.还需要注意的是:push:concat也别名:<<,所以你必须重写他们.这是您应该在重写的关联方法中放置的定义,以便在跟随者已经存在的情况下引发错误.

class User < ActiveRecord::Base
  has_many :followers do
    def <<(*records)
      result = true
      load_target if @owner.new_record?
      transaction do
        flatten_deeper(records).each do |record|
          raise_on_type_mismatch(record)
          raise 'Record Already Exists' if @owner.send(@reflection.name).exists? record
          add_record_to_target_with_callbacks(record) do |r|
            result &&= insert_record(record) unless @owner.new_record?
          end
        end
      end

      result && self
    end
    alias_method :push, :<<
    alias_method :concat, :<<
  end
end
Run Code Online (Sandbox Code Playgroud)