ruby-on-rails - Rails 使用他的 getter 覆盖属性

标签 ruby-on-rails ruby model attributes getter-setter

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

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

def price
   ... logic logic ..
   return something
end

为了覆盖属性本身?

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

可以轻松完成吗,还是我应该做一个 before_save 回调?

最佳答案

如果您在 Ruby 中设置一个值,您将访问 setter 方法。如果你想覆盖 setter ,你必须做这样的事情:

def price=(_price)
  # do some logic
  write_attribute(:price, _price)
end

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

before_save :format_price

private

def format_price
  # Do some logic, for example make it cents.
  self.price = price * 100
end

关于ruby-on-rails - Rails 使用他的 getter 覆盖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13088489/

相关文章:

ruby-on-rails - 具有别名的 ActiveRecord 组

ruby-on-rails - Rails 什么是抓取网站的最佳 gem?

mysql - Rails 异常 Mysql::Error: query: not connected: SHOW FULL FIELDS FROM `publications`

ruby-on-rails - Bundler 安装看似不需要的 gem

css - 按照元素在文档中出现的顺序获取元素

mysql - 如果找不到记录,如何通过扩展模型对 Rails 中的存档进行额外搜索?

ruby-on-rails - DataMapper - 简单关联,DataObjects::SyntaxError - 有什么想法吗?

sql - rails 4 复杂的 SQL 作用域

php - 有没有办法在 laravel 模型中访问关系属性作为自己的?

html - 显示 View 文件中的特定数据