Ruby on rails 在从模型返回价格之前,如何修改价格?
在RubyonRails(v4)中,我希望能够通过模型中的一种方法来折扣价格。我有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
标签
,带有应用于产品
的规则。例如,如果一个产品
有两个标记
,其中一个表示将产品折扣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_属性方法。下面是一个例子,以防其他人遇到同样的问题。