2

这是非常基本的但不起作用。我想添加一个回调(after_save)来大写字段输入。

在我的模型中,我有:

after_save :upcase_tax_label

def upcase_tax_label
   self.tax1_label.upcase!
   self.tax2_label.upcase!
end

因此,当我编辑它时,它应该大写值并以大写字母呈现。但不是。怎么了?谢谢你的帮助

4

2 回答 2

3

after_saveupcase将在模型已保存到数据库后运行这些方法。换句话说,它只是在保存完成后升级内存中的对象属性。那不是你想要的。

您想改为使用before_save,以便在将对象写入数据库之前将属性大写:

before_save :upcase_tax_label

private
def upcase_tax_label
   tax1_label.upcase!
   tax2_label.upcase!
end

底线是您必须显式保存模型才能在数据库中进行更改。在那之前,你只是在玩内存中的一个对象。

于 2011-07-20T11:52:12.047 回答
1
before_save 

将工作。但是,在这种情况下编写自定义设置器通常被认为是更好的样式。它看起来像这样:

def tax1_label=(val)
  write_attribute(:tax1_label, val.upcase)
end

def tax2_label=(val)
  write_attribute(:tax2_label, val.upcase)
end
于 2014-01-10T18:43:38.403 回答