Rails使用他的getter覆盖属性

Dmi*_*tri 2 ruby attributes model ruby-on-rails getter-setter

price我的模型中有一个属性.

我可以使用attribute-getter,它的名称就像属性一样

def price
   ... logic logic ..
   return something
end
Run Code Online (Sandbox Code Playgroud)

为了覆盖属性本身?

目前它不起作用.如果我调用model.price它有效,但当它通过保存对象时model.save,它会存储默认值.

它能以无痛的方式完成,还是应该进行before_save回调?

Mic*_*per 7

如果在Ruby中设置值,则访问setter方法.如果要覆盖setter,则必须执行以下操作:

def price=(_price)
  # do some logic
  write_attribute(:price, _price)
end
Run Code Online (Sandbox Code Playgroud)

这当然是一个讨论点.有时您可以更好地使用回调.像这样的东西:

before_save :format_price

private

def format_price
  # Do some logic, for example make it cents.
  self.price = price * 100
end
Run Code Online (Sandbox Code Playgroud)