ruby-on-rails - Rails 4 接受嵌套属性 id 不能为空

标签 ruby-on-rails ruby-on-rails-4

我正在尝试用一种表单更新两个模型。一切似乎都已结帐,除了两个模型都不会保存(无效)之外,因为需要 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/

相关文章:

javascript - 如何限制某些值被复制的数量。

ruby-on-rails - Rails 4 考勤系统

ruby-on-rails - rails 4 |使用位掩码在表单中为用户分配角色 |好榜样

html - 未定义的方法 `error_span' - Rails 项目

ruby-on-rails - 如何将可选的 URL 参数映射到 params[ :something] in Rails 3 "routes.rb"?

ruby-on-rails - 从 Rails 应用程序到 Star Micronics TSP 143U 的 POS 收据打印

ruby-on-rails - 什么是||方法之间是什么意思?

ruby-on-rails-4 - bonsai-elasticsearch-rails - 不能要求 'elasticsearch/rails/tasks/import'

ruby-on-rails - 如何让谷歌忘记我有一个使用 Heroku SSL 的 SSL 站点

HTML 到 PDF 内容溢出到下一页