【问题标题】:Add forming before saving and validation without encumbering "validate?"在保存和验证之前添加成形而不妨碍“验证?”
【发布时间】:2012-06-17 15:16:42
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    这看起来和这个很相似: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
    

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

    【讨论】:

    • 这行不通:(。首先:on => [:create, :update]给出错误:unexpected '[', expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END ... (self.validation_context == :[:create, :update]),然后我添加:on => :save.save上没有调用回调方法跨度>
    • 抱歉,我没有仔细阅读我提到的另一个主题,它实际上说:on => [:create, :update] 不起作用,:on => :save 也不适合我。我将使用正确的语法进行更新,但对我来说它仍在valid? 上运行。
    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多