У меня есть следующая модель:
class Customer < ActiveRecord::Base
has_one :cart
end
class Cart < ActiveRecord::Base
belongs_to :customer
validates :customer, :presence => true
end
В следующем случае объект Корзина недействителен и не сохранен в БД:
c = Cart.create
c.valid? # false
В следующем случае объект Корзина действителен и сохранен в БД:
c = Cart.create
cus = Customer.create
c.customer = cus
c.valid? # true
В следующем, третьем случае объект Корзина также действителен и сохранен в БД:
cus = Customer.create
cus.cart = Cart.create
Вопрос в том, почему в последнем случае создается действительная запись корзины, которая будет сохранена?
При следовании стековой схеме оценки кода Cart.create подсвечивается перед передачей в метод Customer.cart =. Следовательно, в настоящее время связь Корзины с Покупателем не установлена, и, теоретически, должна быть получена недействительная Корзина, которую не следует сохранять в БД.
Почему происходит сохранение корзины?
Полагаю, объект корзины помечается как "подлежащий сохранению", когда он был создан с помощью метода create и недопустим. При передаче в метод Customer.cart = корзина связывается с покупателем, и вызывается Cart.save, когда корзина помечена как «подлежащая сохранению». Итак, мы получаем модель корзины, сохраненную в БД.
Я прав?