2012-02-09 11 views
2

私は基本的なチェックアウトページを作成しようと、ここで私がこれまで持っているものだよ:永続的な関連付けを持つ非永続レコードでアクションを作成しますか?

チェックアウトがtransactions#newのオフホストされ、そしてフォームが新しいTransactionオブジェクトのオフに構築されています。 Transactionは、その下にネストされたモデルの数を持っている:あなたがチェックアウトページに到着したとき

class Transaction < ActiveRecord::Base 
    # ... 
    accepts_nested_attributes_for :user, :shipping_address, :products 
    # ... 
end 

UserProduct、およびLocation(配送先住所)は、ユーザーの流れに応じて、持続することができます。 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 

+0

ねえ、あなたは 'Transaction'と' Product'の間にあなたの関係を投稿できますか? – Azolo

+0

@Azolo - 私の質問の末尾に追加されています。 – neezer

答えて

0

このエラーが発生する理由は、idproducts_attributesを指定しているためです.Y accepts_nested_attributes_forproductとそれにid HASがすでに関連付けられています。これは、products_attributes=メソッドがproductsアソシエーション内のレコードを作成または変更することが予想されるためです。 Product以来

はすでに永続化されると、あなたはちょうどあなたが代わりに:product_transactionsを含めるようにaccepts_nested_attributes_forを変更する必要がありますProductTransactionを作成しようとしています。

あなたの質問のこの部分はオフ

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を作成する必要がある場合は... しかしを、製品を定義できるようにする必要がある場合、私は知らない私を投げました(ProductTransactionproduct_attributesまたはproduct_idを受け入れる)のコンテキストではTransactionの代わりにProductTransactionのコンテキストで定義する方が意味があります。

関連する問題