我正在尝试将电子商务功能集成到我的rails应用中,并且无法创建新订单。我从一个购物车开始,这个购物车有很多订单,其中有很多交易。我的订单数据库中的第一个字段是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
更新
这是我的new和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
我总是得到一个未定义函数的异常,无论是构建函数还是总价格函数
答案 0 :(得分:3)
在订单模型中,您拥有cart_id,因此请在那里定义关系:
belongs_to :cart
您还可以在购物车模型中定义关系:
has_many :orders
之后,您只需在当前购物篮中添加新订单即可:
@order = Order.new
@order.cart = current_cart
编辑:
也许current_cart方法存在其他问题。
尝试:
@order.cart_id = session[:cart_id]
答案 1 :(得分:0)
我制作了一个关于此的视频:http://www.ror-e.com/info/videos/6
我实际上将购物车与订单分开。所以基本上是购物车has_many cart_item和订单has_many order_items。我很乐意帮忙。请随时直接与我联系。我很乐意讨论专业人士和专业人士。不同方法的结论。
答案 2 :(得分:0)
在您的创建操作中:
@order = current_cart.build_order(order_params)
并添加强力参数:
private
def order_params
params.require(:order).permit(:first_name, :last_name, :card_type, :card_expires_on)
end