Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4接受嵌套的属性id can';不要空白_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails Rails 4接受嵌套的属性id can';不要空白

Ruby on rails Rails 4接受嵌套的属性id can';不要空白,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我正在尝试用一个表单更新两个模型。一切似乎都在结帐,除了两种型号都不会保存(无效),因为所需的客户订单id。如何首先保存客户订单,以便它生成一个id,然后填充付款 def create @customer_order = CustomerOrder.new(customer_order_params) if current_user.id.present? @customer_order.user_id = current_user.id @customer_order.payments.f

我正在尝试用一个表单更新两个模型。一切似乎都在结帐,除了两种型号都不会保存(无效),因为所需的客户订单id。如何首先保存客户订单,以便它生成一个id,然后填充付款

def create

@customer_order = CustomerOrder.new(customer_order_params)

if current_user.id.present?
@customer_order.user_id = current_user.id
@customer_order.payments.first.user_id = current_user.id      
end 



respond_to do |format|
  if @customer_order.save


    format.html { redirect_to @customer_order, notice: 'Customer order was successfully created.' }
当我检查模型是否有效时?这是错误消息

{:"payments.customer_order_id"=>["can't be blank"], :payments=>["is invalid"]}
我的理解是,客户订单将首先创建订单,然后创建付款。提前感谢您的帮助。

保存到数据库之前会运行验证。在这种情况下,由于客户订单尚未保存,因此无法验证是否存在
客户订单id

考虑验证是否存在
客户订单
。这允许验证在客户订单存在时通过,无论是否保存

警告
当通过关联和嵌套属性构建记录时,ActiveRecord将基于反向关联进行赋值。在您的情况下,使用的反向关联是
付款
(在
客户订单
)和
客户订单
(在
付款
)。当通过嵌套属性生成付款时,ActiveRecord将使用这些属性正确设置付款。客户订单。如果ActiveRecord in无法确定反向关联(由于命名、加入关联等原因),则您可能需要向每个关联明确添加
:inverse\u of
选项。

在创建后挂钩中创建第一笔付款(在客户订单模型中)


什么是“error.message”?{:“payments.customer\u order\u id”=>[“不能为空”],:payments=>[“无效”]}这是什么意思?那是从哪里来的?错误信息的事情?为什么返回哈希?如果是通过使用调试器。。。。以下是从视图生成的消息:付款客户订单不能为空。。。这是一个验证错误。除非有客户订单id,否则付款将不会保存。因此,客户订单必须先保存并生成id。然后该id应插入付款模型。好的,那么,您需要确保付款有客户。您确定了,这是客户订单id的验证。。。。。我只是快速搜索了一下如何在模型上创建验证。您指的是使用:验证与之关联的\u吗?再次感谢!我是一个新手,虽然开始了解全局。不,
验证相关的
有点不同,老实说,我从未发现自己需要它。您仍然应该使用状态验证。将
验证:客户\订单\ id,状态:true
(您的实际代码可能略有不同)更改为
验证:客户\订单,状态:true
#Customer order model
after_create :create_first_payment

def create_first_payment
  self.payments.create(user_id: user_id)
end