在保存和验证之前添加成型而不会妨碍"验证?"

时间:2012-06-14 14:47:44

标签: ruby-on-rails ruby-on-rails-3 validation activerecord callback

我有一个before_validation回调,它会重新格式化其中一个条目。我需要它在验证之前运行,以确保格式化的输出被正确解析。但据我所知,每次调用valid?检查数据是否正常时,都会重新格式化该条目。我可以用另一种方式做到这一点,因为在valid?我只想检查所有字段是否有效而不改变某些内容。

1 个答案:

答案 0 :(得分:2)

这看起来非常类似于这个:Rails model validation on create and update only

你可以做到

before_validation(:on => :create) do
  reformat #method call, not a symbol
end
before_validation(:on => :update) do
  reformat #method call, not a symbol
end

但是当我拨打valid?时,它仍然适用于我。不知道为什么,因为那不是在创建或更新的环境中,所以我觉得Rails在这种情况下对我们说谎。

如果你可以把它变成before_save,那么它应该可以工作,因为它在验证后运行。你说你需要验证重新格式化时它仍然可以,所以可能会添加一个新方法来验证重新格式化,并且

before_save :reformat, :validate_reformatting

或在方法结束时添加用于重新格式化的完整性检查。