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