Order、Product 和 OrdersProduct 模型关联
Order, Product and OrdersProduct models associations
我正在构建一个 rails 应用程序,我需要在其中使用产品和订单模型。
我认为逻辑路径是有另一个模型,称为 OrdersProduct,因为一个订单可以有许多要订购的产品,我在其中放了一个 product_id
、order_id
(匹配两个其他型号)和一个 amount
字段。
嗯,我的问题是如何从我的 OrdersProduct 记录中访问每个产品信息?
关键是我可以在我的 OrdersProduct
模型中做一个 belongs_to :product
关联,但是在我的 Product
中放置一个 has_many :orders_products
没有任何意义型号。
模型看起来像这样:
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
并获取与 OrdersProduct 模型相关的产品集合的最佳方式是什么?
你想要的是使用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
,因此您可以指定 line_items
table 而不是使用 orders_products
table。 =16=]
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
您可以删除 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.products
或 order.products
,因为 customer
和 order
是实例。
我正在构建一个 rails 应用程序,我需要在其中使用产品和订单模型。
我认为逻辑路径是有另一个模型,称为 OrdersProduct,因为一个订单可以有许多要订购的产品,我在其中放了一个 product_id
、order_id
(匹配两个其他型号)和一个 amount
字段。
嗯,我的问题是如何从我的 OrdersProduct 记录中访问每个产品信息?
关键是我可以在我的 OrdersProduct
模型中做一个 belongs_to :product
关联,但是在我的 Product
中放置一个 has_many :orders_products
没有任何意义型号。
模型看起来像这样:
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
并获取与 OrdersProduct 模型相关的产品集合的最佳方式是什么?
你想要的是使用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
,因此您可以指定 line_items
table 而不是使用 orders_products
table。 =16=]
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
您可以删除 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.products
或 order.products
,因为 customer
和 order
是实例。