Ruby on rails Rails-在一个所属的目录中同时创建父项和子项
我肯定我做错了,但我不知道在哪里。 我有两种型号: Subscription.rb(儿童)Ruby on rails Rails-在一个所属的目录中同时创建父项和子项,ruby-on-rails,ruby,belongs-to,has-one,Ruby On Rails,Ruby,Belongs To,Has One,我肯定我做错了,但我不知道在哪里。 我有两种型号: Subscription.rb(儿童) 查看注释和您的代码,它不起作用的原因似乎是由于订阅服务器上的验证Restorer有一个Subscription,Subscription属于一个订户。您没有创建订阅服务器,因此订阅的验证失败。您需要删除验证,或者在subscriber上设置那些已验证的属性(订阅者标识和订阅者类型) 你在创作中尝试做的事情有点粗俗,但如果你想这样做,它应该是这样的: def create @restorer = Res
查看注释和您的代码,它不起作用的原因似乎是由于订阅服务器上的验证
Restorer
有一个Subscription
,Subscription
属于一个订户。您没有创建订阅服务器,因此订阅的验证失败。您需要删除验证,或者在subscriber
上设置那些已验证的属性(订阅者标识和订阅者类型)
你在创作中尝试做的事情有点粗俗,但如果你想这样做,它应该是这样的:
def create
@restorer = Restorer.create params[:restorer]
# These two lines aren't needed if you are accepting nested attributes
@restaurant = @restorer.build_restaurant params[:restorer][:restaurant_attributes]
@subscription = @restorer.build_subscription params[:restorer][:subscription_attributes]
subscriber = Subscriber.new params[:subscriber]
@subscription.subscriber = subscriber
if @restorer.save
...
else
...
end
end
顺便说一句,与其验证idsubscriber\u id
,不如验证关系subscriber
:
validates :subscriber, presence: true
查看注释和您的代码,它不起作用的原因似乎是由于订阅服务器上的验证Restorer
有一个Subscription
,Subscription
属于一个订户。您没有创建订阅服务器,因此订阅的验证失败。您需要删除验证,或者在subscriber
上设置那些已验证的属性(订阅者标识和订阅者类型)
你在创作中尝试做的事情有点粗俗,但如果你想这样做,它应该是这样的:
def create
@restorer = Restorer.create params[:restorer]
# These two lines aren't needed if you are accepting nested attributes
@restaurant = @restorer.build_restaurant params[:restorer][:restaurant_attributes]
@subscription = @restorer.build_subscription params[:restorer][:subscription_attributes]
subscriber = Subscriber.new params[:subscriber]
@subscription.subscriber = subscriber
if @restorer.save
...
else
...
end
end
顺便说一句,与其验证idsubscriber\u id
,不如验证关系subscriber
:
validates :subscriber, presence: true
查看注释和您的代码,它不起作用的原因似乎是由于订阅服务器上的验证Restorer
有一个Subscription
,Subscription
属于一个订户。您没有创建订阅服务器,因此订阅的验证失败。您需要删除验证,或者在subscriber
上设置那些已验证的属性(订阅者标识和订阅者类型)
你在创作中尝试做的事情有点粗俗,但如果你想这样做,它应该是这样的:
def create
@restorer = Restorer.create params[:restorer]
# These two lines aren't needed if you are accepting nested attributes
@restaurant = @restorer.build_restaurant params[:restorer][:restaurant_attributes]
@subscription = @restorer.build_subscription params[:restorer][:subscription_attributes]
subscriber = Subscriber.new params[:subscriber]
@subscription.subscriber = subscriber
if @restorer.save
...
else
...
end
end
顺便说一句,与其验证idsubscriber\u id
,不如验证关系subscriber
:
validates :subscriber, presence: true
查看注释和您的代码,它不起作用的原因似乎是由于订阅服务器上的验证Restorer
有一个Subscription
,Subscription
属于一个订户。您没有创建订阅服务器,因此订阅的验证失败。您需要删除验证,或者在subscriber
上设置那些已验证的属性(订阅者标识和订阅者类型)
你在创作中尝试做的事情有点粗俗,但如果你想这样做,它应该是这样的:
def create
@restorer = Restorer.create params[:restorer]
# These two lines aren't needed if you are accepting nested attributes
@restaurant = @restorer.build_restaurant params[:restorer][:restaurant_attributes]
@subscription = @restorer.build_subscription params[:restorer][:subscription_attributes]
subscriber = Subscriber.new params[:subscriber]
@subscription.subscriber = subscriber
if @restorer.save
...
else
...
end
end
顺便说一句,与其验证idsubscriber\u id
,不如验证关系subscriber
:
validates :subscriber, presence: true
如果使用save
您应该将create
替换为new
,也不需要手动使用build.
并尝试save代码>如果出现错误,将引发消息。它将引发记录\u无效错误。。。由于出现此错误,“订户id不应为空”,这是因为您无法验证嵌套的\u属性的id
的存在,因为这些属性本质上几乎是异步创建的在保存完成之前,不会在保存上出现id
。如果您确实必须验证这一点,而我认为您没有对嵌套属性进行验证,那么您必须在一步一步的过程中创建这些对象,例如创建订阅服务器,然后创建关联。您可能能够在事务中处理此问题,但我对此没有什么经验。好的,我如何验证child的存在?我可以解释这一点,但要比这样做简单得多。如果使用save
,您应该将create
替换为new
,而且您不需要手动使用build.
(它应该能自动工作)然后尝试save!
如果出现错误,则会引发消息。它会引发一个记录\u无效错误…似乎与此错误“订户id不应为空”这是因为您无法验证嵌套属性的id
的存在,因为这些属性本质上几乎是异步创建的无id
将出现在保存中,直到保存完成。如果您确实必须对此进行验证,而我认为您不需要对嵌套属性进行验证,那么您必须在一个循序渐进的过程中创建这些对象,例如创建订阅服务器,然后创建关联。您可能能够在事务中处理此问题,但我在这方面没有什么经验这个。好的,我如何验证child的存在?我可以解释这一点,但做得比我这样做要简单得多。如果使用save
您应该将create
替换为new
,而且您不需要使用build.
手动(它应该可以自动工作)然后尝试save!
如果出现错误,则会引发消息。它会引发一个记录\u无效错误…似乎与此错误“订户id不应为空”这是因为您无法验证嵌套属性的id
的存在,因为这些属性本质上几乎是异步创建的无id
将出现在保存中,直到保存完成。如果您确实必须验证它,而我认为您不需要使用嵌套属性,那么您必须创建这些对象