使用具有持久关联的非持久记录创建操作?

时间:2012-02-09 01:43:31

标签: ruby-on-rails-3

我正在尝试制作一个基本的结帐页面,这是我到目前为止所拥有的:

结帐由transactions#new托管,表单由新的Transaction对象构建。 Transaction下面有许多嵌套模型:

class Transaction < ActiveRecord::Base
  # ...
  accepts_nested_attributes_for :user, :shipping_address, :products
  # ...
end
当您到达结帐页面时,

UserProductLocation(送货地址)可以保留,具体取决于用户流程。到达结帐页面时,Product始终保持不变。

除了失败案例之外,此设置目前适用于我。我一直在尝试重新创建新的Transaction记录(使用之前输入的用户信息)来显示相应的错误消息,我尝试在我的控制器中执行此操作:

class TransactionsController < ApplicationController
  def new
    @transaction = Transaction.new
  end

  def create
    @transaction = Transaction.new params[:transaction]

    # ...
  end
end

但是我收到了这个错误:

  在TransactionsController中创建ActiveRecord :: RecordNotFound#创建
  对于ID =

的交易,找不到ID = 1的产品      

请求参数

     

{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“blahblahblah”,   “交易”=&GT; { “products_attributes”=&GT; { “0”=&GT; { “ID”=&gt; “中1”,   “量”=&gt; “中1”}}}}

有谁知道这是怎么回事?如果您在此处需要有关我的设置的信息,请告诉我...试图将此问题归结为最基本的问题......


class Transaction < ActiveRecord::Base
  has_many :product_transactions
  has_many :products, :through => :product_transactions
end

class Product < ActiveRecord::Base
  has_many :product_transactions
  has_many :transactions, :through => :product_transactions
end

class ProductTransaction < ActiveRecord::Base
  belongs_to :transaction
  belongs_to :product
end

1 个答案:

答案 0 :(得分:0)

因此,您之所以收到该错误,是因为您正在使用id提供products_attributes,因为您正在使用accepts_nested_attributes_for { {1}} product已经在关联中{1}}。这是因为id方法期望创建或修改products_attributes=关联中的记录。

由于products已经保留,并且您只是想创建Product,因此您需要更改ProductTransaction以包含accepts_nested_attributes_for

这部分问题让我失望

  当您到达结帐页面时,

:product_transactionsUserProduct(送货地址)可以保留,具体取决于用户流程。到达结帐页面时,Location始终保持不变。

我不知道您是否需要能够定义产品...... 如果您需要在结帐页面上创建Product,那么感觉是在Product (即。ProductTransaction接受ProductTransactionproduct_attributes的上下文中定义它而不是{{ 1}}。