建立购物车和订单之间的关系

时间:2013-01-20 22:19:09

标签: ruby-on-rails ruby

我正在尝试将电子商务功能集成到我的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

我总是得到一个未定义函数的异常,无论是构建函数还是总价格函数

3 个答案:

答案 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