我正在尝试制作一个基本的结帐页面,这是我到目前为止所拥有的:
结帐由transactions#new
托管,表单由新的Transaction
对象构建。 Transaction
下面有许多嵌套模型:
class Transaction < ActiveRecord::Base
# ...
accepts_nested_attributes_for :user, :shipping_address, :products
# ...
end
当您到达结帐页面时, User
,Product
和Location
(送货地址)可以保留,具体取决于用户流程。到达结帐页面时,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
答案 0 :(得分:0)
因此,您之所以收到该错误,是因为您正在使用id
提供products_attributes
,因为您正在使用accepts_nested_attributes_for
{ {1}} product
已经在关联中{1}}。这是因为id
方法期望创建或修改products_attributes=
关联中的记录。
由于products
已经保留,并且您只是想创建Product
,因此您需要更改ProductTransaction
以包含accepts_nested_attributes_for
。
这部分问题让我失望
当您到达结帐页面时,
:product_transactions
,User
和Product
(送货地址)可以保留,具体取决于用户流程。到达结帐页面时,Location
始终保持不变。
我不知道您是否需要能够定义产品...... 但如果您需要在结帐页面上创建Product
,那么感觉是在Product
(即。ProductTransaction
接受ProductTransaction
或product_attributes
)的上下文中定义它而不是{{ 1}}。