这是非常基本的,但不起作用。我想添加一个回调函数(after_save)来提升字段输入。轨道上升
在我的模型,我有:
after_save :upcase_tax_label
def upcase_tax_label
self.tax1_label.upcase!
self.tax2_label.upcase!
end
所以,当我编辑应该upcase价值和CAPS渲染。但不是。怎么了?感谢您的帮助
这是非常基本的,但不起作用。我想添加一个回调函数(after_save)来提升字段输入。轨道上升
在我的模型,我有:
after_save :upcase_tax_label
def upcase_tax_label
self.tax1_label.upcase!
self.tax2_label.upcase!
end
所以,当我编辑应该upcase价值和CAPS渲染。但不是。怎么了?感谢您的帮助
after_save
将在模型已经保存到数据库后运行upcase
方法。换句话说,它只是在保存完成后提升内存中的对象属性。这不是你想要的。
你想改用before_save
,使该对象被写入到数据库之前的属性upcased:
before_save :upcase_tax_label
private
def upcase_tax_label
tax1_label.upcase!
tax2_label.upcase!
end
底线是,你必须明确地保存在要做出的变化的模型数据库。在那之前,你只是在玩内存中的一个对象。
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
同意。奥利维尔,你更有可能让人们继续回答你接受他们答案的问题。 :) – Shaun 2011-01-26 22:00:53