Я довольно новичок в Ruby, поэтому я надеюсь, что просто пропустил что-то очевидное. У меня есть приложение с формой, которая проходит через проверку, используя что-то вроде этого ...Условные проверки в Ruby при использовании ActiveSupport
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?» метод, я не уверен, как отличить скрипты на этом уровне.
Есть ли способ переключаться между двумя (или более) наборами валидаций с использованием одной модели?
Хорошая идея. В то же время я мог бы упростить его, сделав два метода (специальные и специальные) вместо многих, так как контент не зависит от какой-либо конкретной области. Я опубликую больше после того, как попробую. – ThisLanham