0

我正在尝试创建一个订购系统,以便在下订单时,客户登录/注册并将订单添加到他们的索引中。我有两个控制器和它们各自的模型/视图等 - 称为订单和客户。我假设我需要添加一个方法,以便在下订单时将 customer_id 添加到订单中,然后我可以在该特定客户的索引中显示具有该 ID 的所有订单 - 即他们只能看到自己的订单.

这可能是一个很简单的问题,道歉!但我是 Rails 的新手,不知道如何开始使用这个。请问有人可以建议我如何去做吗?

编辑:

感谢大家的帮助!如何让客户索引仅显示该客户的订单?我是否会在他们登录时将 customer_id 存储在会话中,然后将其放入订单中,然后在索引页面中找到具有该 ID 的所有订单?我想我知道如何在登录时将他们的 id 放入会话中,但不确定如何将其提取到客户索引视图中。任何帮助将非常感激!

4

2 回答 2

0

@railsdog 是正确的,但是,这是难题的另一部分(如何首先在订单中获取客户的 ID):

class OrdersController
  def create
    @order = Order.new(params[:order])
    @order.customer_id = current_user.id
    # ...
  end
  #...
end

请注意在控制器中设置 customer_id 的方法,而不是从表单中设置。这样做的原因是,即使是隐藏的表单字段也可以由客户端更改,因此如果您在没有检查服务器端的情况下进行更改,攻击者可能会为其他客户下订单。

于 2012-06-12T11:47:59.970 回答
0

如果您创建的订单表有一个 customer_id,并在客户下订单时填写该 ID,那么订单的客户视图应始终以他们的订单为范围。您将需要区分客户用户和您的管理员用户(也许是您?),如(类似):

class customer
  has_many :orders
end

class order
  belongs_to :customer
end

class OrdersController

  def index
    # determine the current customer (or admin), then
    if current_user.isAdmin?
      @orders = Order.all
    else
      @orders = current_user.orders
    end
  end
end
于 2012-06-12T11:40:29.893 回答