如何通过嵌套属性验证现有的无效模型?

时间:2012-03-27 01:19:01

标签: ruby-on-rails validation activerecord

如果嵌套模型的属性发生了变化,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}})

有没有办法验证嵌套模型,好像它的属性已经改变了? (同时保留错误)

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

我唯一能想到的是你有一个“地址”的引用,你需要重新加载它。