2012-02-09 134 views
2

我试图做一个基本的结账页面,这里是我到目前为止有:使用持久关联创建非持久记录的操作?

结账托管断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 

但我得到这个错误:

ActiveRecord::RecordNotFound in TransactionsController#create
Couldn't find Product with ID=1 for Transaction with ID=

Request Parameters

{"utf8"=>"✓", "authenticity_token"=>"blahblahblah", "transaction"=>{"products_attributes"=>{"0"=>{"id"=>"1", "quantity"=>"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

嘿,你可以发布'交易'和'产品'之间的关系吗? – Azolo 2012-02-10 01:11:51

+0

@Azolo - 附在我的问题的底部。 – neezer 2012-02-10 01:22:54

回答

0

所以,你得到这个错误的原因是因为你提供idproducts_attributes,因为y你正在使用accepts_nested_attributes_forproduct与那id已经在协会。这是因为products_attributes=方法期望创建或修改products关联中的记录。

由于Product已被保留,您只是想创建ProductTransaction,您需要将accepts_nested_attributes_for更改为包含:product_transactions

你的问题的这部分扔我

User , Product , and Location (Shipping Address) can be persisted when you arrive at the checkout page, depending on the user flow. Product is always persisted upon arriving at the checkout page.

我不知道,如果你需要能够定义一个产品...... ,如果你需要在结账创建Product页面将更有意义在ProductTransaction(即,ProductTransaction接受product_attributesproduct_id的上下文中定义它,而不是Transaction的上下文。