I just ran into an interesting issue while testing a Rails application with RSpec. A spec with the following line in it was failing:
This didn't work. As it turns out merely returning false from the validation method isn't enough to mark a model as invalid. This answer on StackOverflow helped identify the problem as not adding an error to the list of validation errors for the model.
An updated version where I add an error finally made everything pass:
ar2.should_not be_validHere ar2 is a model that was constructed in a way that violated a logical constraint. I attempted to make this spec pass by adding a custom validation method to the model as such:
class Registration < ActiveRecord::BaseAll field names have had their names changed to protect their identity.
validate :fields_match
private
def fields_match
return true if model2.nil?
model2.model1.id == model1.id
end
end
This didn't work. As it turns out merely returning false from the validation method isn't enough to mark a model as invalid. This answer on StackOverflow helped identify the problem as not adding an error to the list of validation errors for the model.
An updated version where I add an error finally made everything pass:
class Registration < ActiveRecord::Base
validate :fields_match
private
def fields_match
return true if model2.nil?
return true if model2.model1.id == model1.id
errors.add(:model2_id, "model2 doesn't match model1")
end
end