我在编写 Redmine 插件时遇到了验证问题。
我正在为问题模型编写一个钩子,作为钩子方法的一部分,我想通过添加一个自定义错误来使问题的创建无效:
def controller_issues_new_before_save( context = { } )
context[:issue].errors.add(:due_date, "A custom error")
end
出于测试目的,我编写了一个覆盖 Issue.validate_on_create 的补丁,但似乎每次输入 validate_on_create 时,errors.count 都设置为零。
我需要停止创建问题对象,但仅在将属性设置到另一个模型对象时。
我想过在 validate_on_create 方法中写这个,但是我需要将它传递给另一个对象。
我想到的第一个解决方案是在问题模型中插入一个附加字段,并在钩子内修改它。
就像是 :
def controller_issues_new_before_save( context = { } )
context[:issue].can_validate = false
end
def validate_on_create
unless can_validate
errors.add("error", "A custom error")
end
end
其中 Issue.can_validate 是对问题模型的补充
但是,这似乎不是最好的方法。有没有更简单的方法?