在铁轨中大写

时间:2011-01-26 21:55:58

标签: ruby-on-rails-3 upcase

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

在我的模特中,我有:

after_save :upcase_tax_label

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

因此,当我编辑它时,应该将值加大并在CAPS中渲染。但不是。怎么了?谢谢你的帮助

2 个答案:

答案 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