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