0

我在 Mongoid 3 和 Rails 3 中工作。

我希望在修改集合后在模型上调用验证器:

class TooManyValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    puts "validate called"
    if value.size > 4
      puts "too many???"
      record.errors[attribute] << 'too many'
    end
  end
end    

class Task
  include Mongoid::Document

  has_many :parts, inverse_of: :task
  validates :parts, too_many: true
end

class Part
  include Mongoid::Document

  belongs_to :task, inverse_of: :parts
end

我的测试是:

it "should not have too many parts" do    
  task = Task.create!

  puts "ADDING PARTS"
  6.times { task.parts << Part.create }
  #task.save

  puts "task.errors['parts'] = #{task.errors["parts"]}"

  Task.find(task._id).parts.size.should == 4
end

我得到的输出是:

validate called
ADDING PARTS
task.errors['parts'] = []

并且测试失败了6 != 4

task.save当我在我得到的测试行中评论时也要注意

validate called
ADDING PARTS
validate called
too many???
task.errors['parts'] = ["too many"]

但它仍然失败6 != 4

如何在修改部件集合后调用 :parts on Task 的验证器,并使其在失败后不更新集合?

谢谢

4

0 回答 0