0

我正在尝试将电子商务功能集成到我的 rails 应用程序中,但在创建新订单时遇到了麻烦。我从一个购物车开始,其中有_many 个订单,其中有_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

更新

这是我的新功能和创建功能,我需要该值

  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

而且我总是会为未定义的函数捕获异常,无论是构建函数还是总价格函数

4

3 回答 3

3

在 Order 模型中,您有 cart_id,因此在此处定义关系:

belongs_to :cart

您还可以在 Cart 模型中定义关系,另外:

has_many :orders

之后,您可以简单地将新订单添加到您当前的购物篮中:

@order = Order.new
@order.cart = current_cart

编辑:

current_cart 方法可能还有其他问题。

尝试:

@order.cart_id = session[:cart_id]
于 2013-01-20T23:03:10.203 回答
1

我为此制作了一个视频: http ://www.ror-e.com/info/videos/6

我实际上将购物车与订单分开。所以基本上购物车 has_many cart_item 和订单 has_many order_items。我很乐意提供更多帮助。请随时直接与我联系。我很想讨论不同方法的优缺点。

于 2013-01-21T07:14:54.907 回答
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
于 2015-10-15T21:14:28.613 回答