这是非常基本的但不起作用。我想添加一个回调(after_save)来大写字段输入。
在我的模型中,我有:
after_save :upcase_tax_label
def upcase_tax_label
self.tax1_label.upcase!
self.tax2_label.upcase!
end
因此,当我编辑它时,它应该大写值并以大写字母呈现。但不是。怎么了?谢谢你的帮助
这是非常基本的但不起作用。我想添加一个回调(after_save)来大写字段输入。
在我的模型中,我有:
after_save :upcase_tax_label
def upcase_tax_label
self.tax1_label.upcase!
self.tax2_label.upcase!
end
因此,当我编辑它时,它应该大写值并以大写字母呈现。但不是。怎么了?谢谢你的帮助
after_save
upcase
将在模型已保存到数据库后运行这些方法。换句话说,它只是在保存完成后升级内存中的对象属性。那不是你想要的。
您想改为使用before_save
,以便在将对象写入数据库之前将属性大写:
before_save :upcase_tax_label
private
def upcase_tax_label
tax1_label.upcase!
tax2_label.upcase!
end
底线是您必须显式保存模型才能在数据库中进行更改。在那之前,你只是在玩内存中的一个对象。
before_save
将工作。但是,在这种情况下编写自定义设置器通常被认为是更好的样式。它看起来像这样:
def tax1_label=(val)
write_attribute(:tax1_label, val.upcase)
end
def tax2_label=(val)
write_attribute(:tax2_label, val.upcase)
end