范围可靠的属性

时间:2013-12-13 19:34:55

标签: ruby-on-rails activerecord

有模型定价:

pricingable_id:integer
pricingable_type:string
**store_id**:integer
cost_price:decimal
margin:integer
discount:integer
active:boolean

另一款型号产品:

name
description
...

has_many :pricings, as: :pricingable

那么,我如何根据store_id(单个)将属性cost_price,margin,discount,active从产品委托给定价呢?

尝试类似 has_one:pricing, - > {where store_id:Store.current_id} ,但没有意义。

UPD:我需要从产品型号中分配定价属性:

Store.current_id = 1

p = Product.new
p.cost_price = 100
p.margin = 10
p.discount = 5
p.active = true
p.save

pricing = Product.**pricing** (not pricings, one pricing depending to current store)
pricing.cost_price
=> 100

2 个答案:

答案 0 :(得分:1)

我建议改变你的联想。

价格(来自定价的更改名称,我认为不直观)应该与产品和商店相关联。

在这种布局中,一切都非常简单,我认为这就是你想要实现的目标。

例:

Price.where(product_id: Product.first, store_id: 1).cost_price

编辑示例。

假设您在3家商店中拥有身份1的燕麦产品:Costco,Walmart&阿尔迪。 (ids 1..3)

如果您想在赠送商店更改此产品的价格(比如沃尔玛),您可以这样做

Price.where(store_id: 2, product_id: 1).update {}

更多例子。

特定产品的所有价格:

Product.first.joins(:prices)

商店中的所有价格(及相关价格):

Store.first.joins(products: :prices)

答案 1 :(得分:0)

听起来像你想要一个多态关联...请查看关于这个主题的这个rails指南:

http://guides.rubyonrails.org/association_basics.html#polymorphic-associations