i really like the declarative model-based validation in rails, but i
run into trouble while doing some real world (more complex) stuff.
class User < ActiveRecord::Base
belongs_to :address
accepts_nested_attributes_for :address
def needs_street_validation?
true
end
end
class Address < ActiveRecord::Base
has_one :user
validates_presence_of :street, :if => Proc.new { |adr|
adr.user.needs_street_validation? }
end
u = User.new
u.address = Address.new
u.save
NoMethodError: You have a nil object when you didn’t expect it!
The error occurred while evaluating nil.needs_street_validation?
from app/models/address.rb:3
seems to me like we cannot reference any associated object within the
“:if” condition or do you know some trick to get this working ?
maybe this is not the best example, but i hope you got the point.
in most more-complex gui’s we have conditional validation based on the
state of multiple objects. It would be a shame if we could only handle
those validation programmatically.
tested in a vanilla rails 2.3.2 application.
any help would be really appreciated.
regards
jan