eコマース機能をRailsアプリに統合しようとしていますが、新しい注文を作成するのに問題があります。まず、has_many注文、has_manyトランザクションのカートから始めます。注文データベースの最初のフィールドはcart_idです。view / order / new.html.erbからカート内の情報(total_priceなど)にアクセスできる必要があります。
この関係を構築するのに最適な場所はどこで、どのようにしたらよいでしょうか。セッションIDからカートを見つけることができますが、関係を構築する方法がわかりません。私は注文モデルで、新しいアクションで、そのような何かを考えていましたか?
def new
@order = Order.new
current_cart.@order.build
私のアプリケーションコントローラーで定義されているのは、関数current_cartです。
def current_cart
Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create
session[:cart_id] = cart.id
cart
end
アップデート
これが私の新しいcreate関数であり、値が必要な場所です
def new
@order = Order.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @order }
end
end
# POST /orders
# POST /orders.json
def create
@order = Order.new(params[:order])
# THIS IS WHERE I HAVE TRIED TO BUILD THE RELATIONSHIP
# I have tried current_cart.orders.build, @order.cart = current_cart, and
# @order = current_cart.build_order(params[:order])
@order.ip_address = request.remote_ip
if @order.save
if @order.purchase
render :action => "success"
else
render :action => "failure"
end
else
render :action => 'new'
end
end
これは、モデルのカートにアクセスする必要がある場所です
def price_in_cents
(cart.total_price*100).round
end
そして、ビルド関数または合計価格関数のいずれかの未定義の関数に対して常に例外がキャッチされます