Ruby on rails Rails有许多贯穿的功能

Ruby on rails Rails有许多贯穿的功能,ruby-on-rails,ruby-on-rails-3,controller,many-to-many,has-many-through,Ruby On Rails,Ruby On Rails 3,Controller,Many To Many,Has Many Through,所以这整件事让我很困惑。我知道如何设置它,但我似乎找不到任何地方可以真正解释在控制器中使用它的最佳方式 我所拥有的: 产品、订单、订单和产品 Products and Orders表包含标准内容(Id、名称、时间戳等) Orders\u Products表有两个id列(order\u id、product\u id)和一个quantity列 我需要做什么: 现在,当我保存我的“购物车”时,如何保存新订单和每个产品及其数量 这是我在rails中的第一个应用程序,所以解释越多越好 提前感谢所有的帮助

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

我所拥有的:

产品、订单、订单和产品

Products and Orders表包含标准内容(Id、名称、时间戳等)

Orders\u Products表有两个id列(order\u id、product\u id)和一个quantity列

我需要做什么:

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

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


提前感谢所有的帮助

首先,您应该只有两个表:订单和产品。 这是我在一个问题中得到的一个很好的指导——guides.rubyonrails.org/association_basics.html

读一读这篇文章,熟悉rails中的关联,但您正试图实现以下目标-

在您的订单模式中有关系吗

  has_many :products
  belongs_to :order
与您的产品型号有关系吗

  has_many :products
  belongs_to :order
这样,您就可以将您的产品链接到您的订单。然后你可以像这样打电话

  order.products
这将为您提供特定订单的所有产品

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

就将产品保存到订单而言,您可以在产品控制器中通过将订单id关联到视图中的某种形式,并通过params散列发送订单id,然后写入

   product = Product.create(params[:product])
或者你可以在你的控制器里做,然后说

   product.order_id = @order.id
@订单可以从products controller中url中的订单id中找到,因此您只需创建一个方法

   def find_order
      @order = Order.find(params[:order_id])
   end
在你可以说的任何动作之前,在控制器的顶部

   before_filter :find_order, :only => :youractiontosaveproducts
这样做的目的是在调用该操作之前找到要保存产品的订单

在答案中编写所有代码有点过火,阅读该指南并进行一些练习将使您走上正确的轨道:)