次の構造を持つ 2 つのモデルがあります。
class Wallet < ActiveRecord::Base
  include ActiveModel::Validations
  has_one :credit_card
  accepts_nested_attributes_for :credit_card
  validates :credit_card, :presence => true
  validates_associated :credit_card
  ...
end
class CreditCard < ActiveRecord::Base
  include ActiveModel::Validations
  belongs_to :wallet
  validates :card_number, :presence => true
  validates :expiration_date, :presence => true
  ...
end
RSpec を使用してアプリケーションの機能をテストしていて、奇妙なことに気付きました。ネストされたモデル (nil card_number を持つなど) の検証基準を満たさない属性でハッシュを作成し、update_attributes呼び出しを実行しようとすると、無効な CreditCard がネストされた Wallet オブジェクトで返されるものモデル、および適切なエラー。これは正しい、予想される動作です。
同じ Hash を取得して run を実行するassign_attributesとsave( update_attributes が実行する必要があるのはこれだけですが、完全に nil のネストされたオブジェクトを持つ無効な Wallet オブジェクトが返されます。なぜですか?そして、ネストされたすべてのオブジェクトを更新するにはどうすればよいですか?保存せずに属性値とエラーをチェックしますか?