2

所以这整个多对多让我感到困惑。我知道如何设置它,但似乎无法找到任何可以解释在控制器中使用它的最佳方法。Rails有很多通过

我有什么:

产品的订单,Orders_Products

产品和Orders表具有标准的东西(ID,姓名,时间戳等)

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

我需要做什么:

现在,当我救我的“购物车”,你如何保存一个新的秩序,其数量每一个产品?

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

在此先感谢您的帮助!

回答

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找到在你的产品你的控制器的url,所以你只要把方法说

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

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

before_filter :find_order, :only => :youractiontosaveproducts 

什么,将要做的就是找到你的产品保存到之前采取行动调用的顺序。

写一个答案的所有代码是有点矫枉过正,阅读该指南和一些练习会让你在正确的轨道:)