1

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

4

1 回答 1

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 在这种情况下对我们撒谎。

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

before_save :reformat, :validate_reformatting

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

于 2012-06-14T15:04:34.480 回答