Ruby on rails Rails-在一个所属的目录中同时创建父项和子项

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

我肯定我做错了,但我不知道在哪里。 我有两种型号:

Subscription.rb(儿童)


查看注释和您的代码,它不起作用的原因似乎是由于订阅服务器上的验证
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
顺便说一句,与其验证id
subscriber\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
顺便说一句,与其验证id
subscriber\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
顺便说一句,与其验证id
subscriber\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
顺便说一句,与其验证id
subscriber\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
将出现在保存中,直到保存完成。如果您确实必须验证它,而我认为您不需要使用嵌套属性,那么您必须创建这些对象