这是非常基本但不起作用。我想添加一个回调(after_save)来填充字段输入。
在我的模特中,我有:
after_save :upcase_tax_label
def upcase_tax_label
self.tax1_label.upcase!
self.tax2_label.upcase!
end
因此,当我编辑它时,应该将值加大并在CAPS中渲染。但不是。怎么了?谢谢你的帮助
答案 0 :(得分:3)
after_save
将运行upcase
方法。换句话说,它只是在保存完成后将内存中的对象属性更新。那不是你想要的。
您希望改为使用before_save
,以便在将对象写入数据库之前将属性提升:
before_save :upcase_tax_label
private
def upcase_tax_label
tax1_label.upcase!
tax2_label.upcase!
end
底线是您必须显式保存模型以便在数据库中进行更改。在那之前,你只是在内存中玩一个物体。
答案 1 :(得分:1)
before_save
会奏效。但是,在这种情况下编写自定义setter通常被认为是更好的风格。它看起来像这样:
def tax1_label=(val)
write_attribute(:tax1_label, val.upcase)
end
def tax2_label=(val)
write_attribute(:tax2_label, val.upcase)
end