我有:
scaffold Book name price:integer
scaffold Sale book:referenes quantity:integer
书.rb
has_many :sales
销售.rb:
belongs_to :book
def total
book.price * quantity.to_f
end
问题:如果我想改变一本书的价格,它会重新计算所有过去的销售额。
我可以避免这种情况吗?通过某种方式保存产品的定价历史记录或拥有 current_price(有效价格)?
最佳答案
如果你不关心这本书的价格历史,你可以在 Sale
模型中添加一个 sale_price
,这将等于这本书的价格在创建销售时预订。如果您决定添加它,您可能需要考虑添加另一列来指示销售价格,即“10% 折扣”或“黑色星期五销售”。
这样做的好处是您不再需要加载图书记录来计算总价。
bin/rails g migration add_sale_price_to_sales
bin/rake db:migrate
# app/model/sale.rb
def total
sale_price.to_f * quantity.to_d
end
在您的销售 Controller 中,您可能需要添加类似以下代码的内容,以便您可以自动设置sale_price
。
def create
@sale = Sale.new(sale_params)
@sale.sale_price = @sale.book && @sale.book.price
if @sale.save
redirect_to @sale
else
render :new
end
end
关于ruby-on-rails - Rails 中的动态产品价格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40900673/