如果嵌套模型的属性发生了变化,Rails似乎只会验证现有的无效嵌套模型。
使用以下型号:
class Person < ActiveRecord::Base
has_many :addresses
accepts_nested_attributes_for :addresses
end
class Address < ActiveRecord::Base
belongs_to :person
validates_presence_of :street
end
以下代码例如,将保存并返回true:
p = Person.first
p.update_attributes({:first_name => "Bryan", :addresses_attributes=>{"0"=>{:street=>"", :id => 1}})
有没有办法验证嵌套模型,好像它的属性已经改变了? (同时保留错误)
答案 0 :(得分:1)
它对我有用 - 这是我为证明它而创建的测试用例
require 'test_helper'
class PersonTest < ActiveSupport::TestCase
test "update address" do
expected_new_address="pandascout"
person = Person.create(name: "jwo")
address = person.addresses.create(street: "123 Elm")
person.update_attributes({:addresses_attributes=>{"0"=>{:street=>expected_new_address, :id=>address.id}}})
assert_equal expected_new_address, person.addresses.first.street
end
end
我唯一能想到的是你有一个“地址”的引用,你需要重新加载它。