Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在从模型返回价格之前,如何修改价格?_Ruby On Rails_Model_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 在从模型返回价格之前,如何修改价格?

Ruby on rails 在从模型返回价格之前,如何修改价格?,ruby-on-rails,model,ruby-on-rails-4,Ruby On Rails,Model,Ruby On Rails 4,在RubyonRails(v4)中,我希望能够通过模型中的一种方法来折扣价格。我有标签,带有应用于产品的规则。例如,如果一个产品有两个标记,其中一个表示将产品折扣10美元,第二个规则表示将产品折扣3美元,我需要能够将产品的价格设置为两个规则中的较低者 所以我的问题是:我能用一个自定义方法覆盖@product.price方法吗?这个自定义方法允许我首先应用标记规则?当然。因为价格是一个属性(我假设),所以您总是可以在产品类中重新定义价格 例如: def price calculate_disc

在RubyonRails(v4)中,我希望能够通过模型中的一种方法来折扣价格。我有
标签
,带有应用于
产品
的规则。例如,如果一个
产品
有两个
标记
,其中一个表示将产品折扣10美元,第二个规则表示将产品折扣3美元,我需要能够将产品的价格设置为两个规则中的较低者


所以我的问题是:我能用一个自定义方法覆盖
@product.price
方法吗?这个自定义方法允许我首先应用
标记
规则?

当然。因为价格是一个属性(我假设),所以您总是可以在
产品
类中重新定义价格

例如:

def price
  calculate_discount
end
然后在
计算折扣

def calculate_discount
  old_price = read_attribute(:price)
  # apply your rules here
end

你当然可以。您可以在保存前使用
,或在保存后使用
,或类似的方法,在
@产品
保存后立即执行折扣。类似这样的事情可能会有所帮助:

def get_tags_and_discount
  self.tags.each do |tag|
    self.price = self.price - tag.discount
  end
end

当我做像self.price=self.price-10.00这样的事情时,似乎会出错。这是因为ruby假设您正在调用方法
price
。您需要显式使用
read\u属性(:price)
。请查看更新的答案。所以您可能需要
self.price=read\u属性(:price)-10.00
。就是这样。read_属性方法。下面是一个例子,以防其他人遇到同样的问题。