Rails Has_many通过

时间:2012-02-28 00:18:12

标签: ruby-on-rails ruby-on-rails-3 controller many-to-many has-many-through

所以这整个多对多的事情让我很困惑。我知道如何设置它但我似乎无法找到真正解释在控制器中使用它的最佳方式的任何地方。

我有什么:

产品,订单,订单_产品

产品和订单表包含标准内容(ID,名称,时间戳等)

Orders_Products表有两个id列(order_id,product_id)和一个数量列。

我需要做什么:

现在,当我保存“购物车”时,您如何保存新订单和每件产品的数量?

这是我在rails中的第一个应用程序,所以解释越多越好。

提前感谢所有帮助!

1 个答案:

答案 0 :(得分:2)

首先,您应该只有两个表,订单和产品。 这是我在我的一个问题中给出的一个很棒的指南 - guides.rubyonrails.org/association_basics.html

阅读这些内容以熟悉rails中的关联,但是您要实现的目标几乎是以下内容 -

在您的订单模型中有关系

  has_many :products

在您的产品模型中有关系

  belongs_to :order

通过这种方式,您可以将产品与订单相关联。然后你可以拨打电话,如

  order.products

将为您提供特定订单的所有产品。

在您的迁移中,您需要为产品提供order_id,以便在订单和产品之间建立关联。

在将产品保存到订单方面,您可以在产品控制器中执行此操作,方法是将order_id与视图中的某种形式相关联,然后通过params散列发送订单ID,然后编写

   product = Product.create(params[:product])

或者您可以在控制器中执行此操作并说

   product.order_id = @order.id

@order可以从您的产品控制器中的网址的订单ID中找到,因此您只需要制作一个方法

   def find_order
      @order = Order.find(params[:order_id])
   end

并且在您可以说任何操作之前在控制器的顶部

   before_filter :find_order, :only => :youractiontosaveproducts

这样做的目的是在调用该操作之前找到保存产品的顺序。

要在答案中写下所有代码有点矫枉过正,阅读该指南并进行一些练习将使您走上正轨:)