【问题标题】:Rails Has Many ThroughRails 有很多通过
【发布时间】:2012-03-17 11:39:54
【问题描述】:

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

我有什么:

产品、订单、订单_产品

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

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

我需要做什么:

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

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

提前感谢所有帮助!

【问题讨论】:

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


    【解决方案1】:

    首先,您应该只有两个表,Orders 和 Products。 这是我在一个问题中得到的一个很好的指南 - 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 可以从您的产品控制器中的 url 中的订单 ID 中找到,因此您只需创建一个方法说

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

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

       before_filter :find_order, :only => :youractiontosaveproducts
    

    这会在调用该操作之前找到您保存产品的顺序。

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

    【讨论】:

      猜你喜欢
      • 2021-11-16
      • 2017-04-25
      • 2023-04-09
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 2011-05-11
      相关资源
      最近更新 更多