0

**更新

我有以下型号:

产品.rb

class Product

belongs_to :user
has_many :line_items
has_many :orders, :through => :order_products
has_many :order_products

lineitem.rb

class LineItem

belongs_to :product
belongs_to :cart
belongs_to: order

订单.rb

class Order

belongs_to :user
belongs_to :product
has_many :purchases
has_many :line_items, :dependent => :destroy
has_many :orders, :through => :order_products
has_many :order_products

accepts_nested_attributes_for :order_products

order_product.rb

class OrderProduct < ActiveRecord::Base
    belongs_to :order
    belongs_to :product
end

order_controller.rb

if @order.save

  if @order.purchase
    Cart.destroy(session[:cart_id])
    session[:cart_id] = nil 

以上是我对模特的联想。购买购物车后,我在存储 line_items 中的多个 product_id 时遇到了一个大问题。

我相信 if@order.purchase 之后应该有代码才能工作。我想如何将 order_id 和 product_id 存储到 order_products 表中。

任何人都可以帮助我吗?

感谢这里的任何帮助。谢谢

4

1 回答 1

0

看起来您可能会从了解accepts_nested_attributes_for以及如何foreign_keys使用 ActiveRecord中受益


外键

如果您正确设置了 ActiveRecord 关联,您将能够@product.line_items从单个呼叫中调用类似的东西

ActiveRecord(以及一般的关系数据库)可以正常工作foreign_keys,这基本上是对另一个表中模型 id 的引用。当您说要order_id在另一个表中输入时,您真正需要看的是如何让 ActiveRecord 将正确的外键放入记录中

我写这篇文章的原因是因为如果你能理解 ActiveRecord 是如何工作的,你将处于一个更强大的位置来解决你的问题


Accepts_Nested_Attributes_For

我相信对您有帮助的功能是accepts_nested_attributes_for- 它基本上允许您通过当前模型保存另一个模型的数据

它是这样工作的:

#/app/models/order.rb
class Order

belongs_to :user
belongs_to :product
has_many :purchases
has_many :line_items, :dependent => :destroy
has_many :orders, :through => :order_products
has_many :order_products

accepts_nested_attributes_for :order_products

这意味着如果您将适当的嵌套属性发送到此模型,它将:order_products为您处理

为此,您需要将其添加到您的表单和控制器中:

#app/controllers/orders_controller.rb
def new
    @order = Order.new
    @order.order_products.build
end

private
def strong_params
    params.require(:order).permit(:standard_params,  order_products_attributes: [:name]  )
end


#app/views/orders/new.html.erb
<%= form_for @order do |f| %>
    <%= f.fields_for :order_products do |product| %>
         <%= product.text_field :name %>
    <% end %>
<% end %> 
于 2013-11-13T09:18:10.420 回答