我试图在将表单中的字段保存到数据库之前将其更改为小写。这是我的代码,但数据库的输出仍然是大写。为什么代码不起作用?
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
6条答案
按热度按时间pb3s4cty1#
downcase
返回字符串的副本,不修改字符串本身。请改用downcase!
:有关详细信息,请参阅文档。
fkaflof62#
您并不是通过运行
self.name.downcase
来将name
设置为小写,因为#downcase
不会修改字符串,它会返回该字符串。但是,在模型中我喜欢使用另一种方法:
niwlg2el3#
String#downcase
不会改变字符串,它只是返回该字符串的一个修改后的副本。但是,如果您希望坚持使用
downcase
方法,则可以执行以下操作:这会将name示例变量重新分配给对name的原始值调用downcase的结果。
nfzehxib4#
其他代码较少的简单示例:
希望这对你有帮助!
bvhaajcl5#
如果你还想把运算结果保存到变量中,你需要在调用方法 downcase 后使用感叹号。
不要忘记 .downcase! 替换只在ASCII区域有效。
tf7tbtn26#
另一个解决方案是删除
before_save
并monkeypatchinitialize
方法然后你可以说