2012-02-09 128 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的上下文。