ruby-on-rails - Rails 中的动态产品价格

标签 ruby-on-rails ruby

我有:

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/

相关文章:

ruby-on-rails - 如何在 Ruby on Rails 中输出层次列表

ruby - 检查具有特定扩展名的文件的目录

ruby-on-rails - Rails 中至少有 2 个 DateTime?

ruby-on-rails - Carrierwave Rails 3 S3,保存文件大小到数据库

ruby-on-rails - Rails/Paperclip Errno::EACCES(权限被拒绝)

ruby-on-rails - rails + Angularjs : Module 'ngResource' is not available

ruby - 什么!是指在 Ruby 方法定义的末尾?

ruby-on-rails - form_for 参数

ruby - Ruby 中的 'upto' 方法

ruby-on-rails - 英雄库/rails : How to install the GNU Scientific Library (GSL) on Heroku?