我在 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 的验证器,并使其在失败后不更新集合?
谢谢