私は 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 の検証ツールをパーツ コレクションの変更後に呼び出し、失敗後にコレクションを更新しないようにするにはどうすればよいですか?
ありがとう