У меня есть две модели со следующей структурой:Rails «assign_attributes» не назначая вложенные модели
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
, то то, что я получаю в кошельке с недействительной кредитной картой вложенной модели и соответствующих ошибок. Это правильное, ожидаемое поведение.
Если взять то же Hash, хотя и запустить assign_attributes
, а затем save
(это все, что update_attributes должен делать, то я получаю возвратил недействительный объект Wallet с полностью нулевым вложенным объектом. Почему? И как может Я обновляю все значения вложенных атрибутов и проверить на наличие ошибок без сохранения
Эта ссылка, кажется, говорит обратное (что знак равенства - это функция, которая пропускает проверки безопасности). И я не понимаю, почему это приведет к поведению, которое я вижу. – Bryce