我对 Ruby 还很陌生,所以我希望我只是错过了一些明显的东西。我有一个应用程序,其表单使用类似这样的方式进行验证...
module FormValidations
extend ActiveSupport::Concern
included do
validates :field_1, :if => lambda { self.stage == APPLICATION_STAGE[:DATA_ENTRY] }
validates :field_2, :if => lambda { self.stage == APPLICATION_STAGE[:DATA_ENTRY] }
validate :field_sec, :if => lambda { self.stage == APPLICATION_STAGE[:DATA_ENTRY] }
def field_sec
(*some custom stuff*)
end
...等等,效果很好。
我现在有一种新型表单,它使用相同的模型和数据库结构,但设置了一些不同的东西。它还经历了完全不同的验证过程。我一直在尝试找到一种方法,以便使验证调用有条件,例如...
included do
validate :form_switch, :if => lambda { self.stage == APPLICATION_STAGE[:DATA_ENTRY] }
def form_switch
#This uses a method I defined in the model to tell which form is active
if is_special_form == true
validates :field_245, :if => lambda { self.stage == APPLICATION_STAGE[:DATA_ENTRY] }
validates :field_432, :if => lambda { self.stage == APPLICATION_STAGE[:DATA_ENTRY] }
else
validates :field_1, :if => lambda { self.stage == APPLICATION_STAGE[:DATA_ENTRY] }
validates :field_2, :if => lambda { self.stage == APPLICATION_STAGE[:DATA_ENTRY] }
end
end
...但是“验证”放置在方法中时会引发错误。
我还玩弄了将两个单独的验证脚本文件包含到我的表单模型中的想法,但是由于该过程是使用简单的“.valid?”执行的。方法,我也不确定如何区分该级别的脚本。
有没有办法使用单个模型在两组(或更多组)验证之间切换?