Ruby on Rails:before_save字段为小写

use*_*826 15 ruby database sqlite activerecord ruby-on-rails

我想在将字段保存到数据库之前将字段从表单更改为小写.这是我的代码,但数据库的输出仍然是大写的,为什么代码不工作?

class Transaction < ActiveRecord::Base
   validates :name, presence: true
   validates :amount, presence: true, numericality: true
   before_save :downcase_fields

   def downcase_fields
      self.name.downcase
   end
end
Run Code Online (Sandbox Code Playgroud)

Ger*_*osi 27

downcase返回字符串的副本,不修改字符串本身.downcase!改为使用:

def downcase_fields
  self.name.downcase!
end
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅文档


Vin*_*sil 5

您没有name通过运行设置为小写self.name.downcase,因为#downcase它不会修改字符串,而是返回它。你应该使用 bangdowncase方法

self.name.downcase!
Run Code Online (Sandbox Code Playgroud)

但是,我喜欢在模型中采用另一种方式:

before_save { name.downcase! }
Run Code Online (Sandbox Code Playgroud)