【发布时间】:2011-08-04 09:47:16
【问题描述】:
我在编写 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 是对问题模型的补充
但是,这似乎不是最好的方法。有没有更简单的方法?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 redmine redmine-plugins