订单,产品和订单产品模型关联

时间:2016-04-05 12:34:56

标签: ruby-on-rails activerecord associations

我正在构建一个rails应用程序,我需要有产品和订单模型。

我认为逻辑路径是另一个名为OrdersProduct的模型,因为订单可以订购许多产品,我在其中放置product_idorder_id(与其他两个模型匹配) )和amount字段。

好吧,我的问题是如何从OrdersProduct记录中访问每个产品信息?

关键是我可以与belongs_to :product模型建立OrdersProduct关联,但在has_many :orders_products Product class Customer < ActiveRecord::Base # id # name # etc… end class Product < ActiveRecord::Base # id # name # etc… end class Order < ActiveRecord::Base # id # customer_id # etc… end class OrdersProduct < ActiveRecord::Base # order_id # product_id # amount end 中添加Order.products是没有意义的模型。

模型似乎是这样的:

> TEST=`echo -e "hello\\nworld"`
> echo $TEST 
hello 
world

访问print "Enter either 5 or 10 or 15 or 20): "; my $obfuscation_percentage = <STDIN>; chomp $obfuscation_percentage; if ($obfuscation_percentage ne 5 or 10 or 15 or 20 ){ print "Enter valid number: "; } $obfuscation_percentage = <STDIN>; chomp $obfuscation_percentage; 并获取与OrdersProduct模型相关的产品集合的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

您想要的是使用Has and belongs to many through关联。

class Order < ActiveRecord::Base
  has_many :orders_products
  has_many :products, through: :orders_products
end

class Product < ActiveRecord::Base
  has_many :orders_products
  has_many :orders, through: :orders_products
end

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

现在,在商业术语中,订购的产品通常被引用为LineItem,因此您可以指定orders_products表,而不是使用line_items表。

class Order < ActiveRecord::Base
  has_many :line_items
  has_many :products, through: :line_items
end

class Product < ActiveRecord::Base
  has_many :line_items
  has_many :orders, through: :line_items
end

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

答案 1 :(得分:-1)

您可以摆脱OrdersProduct模型。

只需要以下型号:

class Customer < ActiveRecord::Base
  has_many :orders
  # id
  # name
  # etc…
end

class Order < ActiveRecord::Base
  belongs_to :customer
  has_many :products

  # id
  # customer_id
  # etc…
end

class Product < ActiveRecord::Base
  belongs_to :order

  # id
  # name
  # order_id
  # etc…
end

现在,您可以致电customer.orders.first.productsorder.products,因为customerorder是实例。