我正在尝试用一种表单更新两个模型。一切似乎都已结帐,除了两个模型都不会保存(无效)之外,因为需要 customer_order_id。如何先保存 customer_order,以便它生成 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"]}
据我了解,customer_order 将首先创建订单,然后创建付款。预先感谢您的帮助。
最佳答案
在保存到数据库之前运行验证。在这种情况下,由于客户订单尚未保存,因此无法验证 customer_order_id
是否存在。
考虑验证 customer_order
是否存在。这样,无论是否保存客户订单,验证都会在存在时通过。
警告
当通过关联和嵌套属性构建记录时,ActiveRecord 将根据逆关联进行分配。在您的情况下,使用的反向关联是 payment
(在 CustomerOrder
上)和 customer_order
(在 Payment
上)。当通过嵌套属性构建付款时,ActiveRecord 将使用它们来正确设置 payment.customer_order
。如果 ActiveRecord 无法确定反向关联(由于命名、加入关联等),那么您可能需要向每个关联显式添加 :inverse_of
选项。
关于ruby-on-rails - Rails 4 接受嵌套属性 id 不能为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33104838/