我有以下结构:一个Order has_many销售(和一个Sale belongs_to)Order。
quantity和 一个price列。totalprice栏totalprice由 属于父级的销售记录中的pricex quantityx组成。12Order
这是我的计算在订单模型中的样子:
class Order < ActiveRecord::Base
has_many :sales, dependent: :destroy
after_save :calc
def price
sales.to_a.sum { |item| item.price }
end
def totalpricex12
totalpricex12 = price*12
end
def totaldiscount
sales.to_a.sum { |item| item.discount }
end
def calc
calc = (totalpricex12.to_f)-(totaldiscount.to_f)
self.update_columns(totalprice: calc)
end
end
Run Code Online (Sandbox Code Playgroud)
问题是: totalprice只有在更新或保存时才会更新,但在添加或删除Order新内容时不会更新。Sale
你会想要使用inverse_of:
#app/models/sale.rb
class Sale < ActiveRecord::Base
belongs_to :order, inverse_of: :sales
validates :order, presence: true
after_create :update_order
after_destroy :update_order
private
def update_order
order.calc
end
end
#app/models/order.rb
class Order < ActiveRecord::Base
has_many :sales, inverse_of: :order
end
Run Code Online (Sandbox Code Playgroud)
sale这将为您提供与/关联的各个对象,这些对象将通过以下方法order提供:inverse_of
当我们调用
criminal.prisonwithout和:inverse_of关联时,它将访问数据库。对于,如果我们内存中已经有该监狱记录,那么将指向同一个监狱。:belongs_to:has_many:inverse_ofcriminal.prison
| 归档时间: |
|
| 查看次数: |
1928 次 |
| 最近记录: |