Mat*_*tW. 2 validation ruby-on-rails associations
我使用上下文在模型生命周期的不同点调用特定验证:
model Address
validates :city, presence: true
validates :street, presence: true, on: :send_letter
end
incomplete_address = Address.new(city: 'Berlin')
incomplete_address.valid? # => true
incomplete_address.valid?(:send_letter) # => false
Run Code Online (Sandbox Code Playgroud)
这对于上面的简单情况来说效果很好。但是,据我所知,任何关联对象的上下文都会被忽略:
model Address
belongs_to :country
validates :street, presence: true, on: :send_letter
validates_associated :country
end
model Country
has_many :addresses
validates :iso_alpha_3, presence: true, size: 3, on: :send_letter
end
incomplete_address = Address.new(street: 'Oranienstr', country: Country.new(name: 'Germany', iso_alpha_3: 'Invalid iso code')
incomplete_address.valid? # => true
incomplete_address.valid?(:send_letter) # => true
incomplete_address.country.valid?(:send_letter) => false
Run Code Online (Sandbox Code Playgroud)
问题:这是预期的行为,还是我遇到的错误?或者我犯了概念错误?在这种情况下验证关联模型的最优雅的方法是什么?