Я уверен, что делаю это неправильно, но я не вижу, где. У меня есть эти две модели:Rails - создать родительский и дочерний в то же время в has_one принадлежит_to
Subscription.rb (ребенок)
class Subscription < ActiveRecord::Base
attr_accessible :state, :subscriber_id, :subscriber_type, :last_payment
belongs_to :subscriber, polymorphic: true
validates :subscriber_id, presence: true
validates :subscriber_type, presence: true
end
restorer.rb (Parent)
class Restorer < User
attr_accessible :firstname, :lastname, :restaurant_attributes, :subscription_attributes
has_one :restaurant, dependent: :destroy, :autosave => true
has_one :subscription, as: :subscriber, :autosave => true
accepts_nested_attributes_for :restaurant
accepts_nested_attributes_for :subscription
end
Когда я хочу два создать новый реставратор и новая подписка (в то же время) Не работает:
def create
@restorer = Restorer.create params[:restorer]
@restaurant = @restorer.build_restaurant params[:restorer][:restaurant_attributes]
@subscription = @restorer.build_subscription params[:restorer][:subscription_attributes]
if @restorer.save
...
else
...
end
end
если вы используете 'save' вы sould заменить' 'create' в new', также вам не нужно использовать' строить _ .. 'Мануалы (он должен работать автоматически) и попробуйте 'save!', которые поднимают сообщение, если что-то не так. – IS04
он поднимает ошибку record_invalid ... кажется, с этой ошибкой 'subscriber_id не должен быть пустым' – p0k3
Это связано с тем, что вы не можете проверить наличие 'id' для' nested_attributes', поскольку они по существу создаются почти 'асинхронно''' id' будет сохранен до сохранения после завершения сохранения. Если вы действительно должны подтвердить это, что я не чувствую, что вы делаете с вложенными атрибутами, тогда вам придется создавать эти объекты на этапе с помощью процедуры, например. создайте подписчика, затем создайте ассоциации. Вы можете справиться с этим в транзакции, но у меня мало опыта с этим. – engineersmnky