Я уверен, что делаю это неправильно, но я не вижу, где. У меня есть две модели:
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 (родительский)
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
, вы должны заменитьcreate
наnew
, также вам не нужно использоватьbuild_..
вручную (оно должно работать автоматически) и попробоватьsave!
, которое вызовет сообщение, если что-то не так. - person Igor Guzak   schedule 09.09.2014id
дляnested_attributes
, поскольку они, по сути, создаются почтиasynchronously
,id
не будут присутствовать в сохранении до завершения сохранения. Если вы действительно должны проверить это, что, как мне кажется, вы не делаете с вложенными атрибутами, вам придется создавать эти объекты в пошаговой процедуре, например. создайте подписчика, затем создайте ассоциации. Вы можете справиться с этим в транзакции, но у меня мало опыта в этом. - person engineersmnky   schedule 09.09.2014