mam dwa modele o następującej strukturze:Rails „assign_attributes” nie przypisując modele zagnieżdżone
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
Mam testowanie funkcjonalności mojego wniosku z RSpec i zauważyłem coś dziwnego. Jeśli utworzę mieszanie z atrybutami, które nie spełniają kryteriów sprawdzania poprawności mojego zagnieżdżonego modelu (na przykład o zerowym numerze karty), a następnie spróbuję wykonać wywołanie update_attributes
, to co otrzymam zwrócone w obiekcie Portfela z nieprawidłową kartą kredytową zagnieżdżony model i odpowiednie błędy. To jest prawidłowe, oczekiwane zachowanie.
Jeśli wezmę tego samego Hash chociaż i uruchomić assign_attributes
, a następnie save
(co jest to, że update_attributes należy robić, a potem się wrócił nieprawidłowy obiekt Portfel z zupełnie nil zagnieżdżonego obiektu ogóle. Dlaczego? I w jaki sposób można zaktualizować wszystkich zagnieżdżonych wartości atrybutów i sprawdzić błędy bez zapisywania
To połączenie wydaje się mówić coś przeciwnego (znak równości jest funkcją, która pomija kontrole bezpieczeństwa). I nie rozumiem, dlaczego spowodowałoby to zachowanie, które widzę. – Bryce