Ruby on rails Rails 4接受嵌套的属性id can';不要空白
我正在尝试用一个表单更新两个模型。一切似乎都在结帐,除了两种型号都不会保存(无效),因为所需的客户订单id。如何首先保存客户订单,以便它生成一个id,然后填充付款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
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