Вы можете определить виртуальный атрибут, который будет использоваться для определения того, какие атрибуты для проверки на каком этапе, а затем использовать значение этого атрибута на with_options
проверить необходимые поля на каждом шаге.
Что-то вроде следующего:
В вашей модели:
class MyModal < ActiveRecord::Base
attr_accessor :validate_step
with_options if: :validate_step_one? do |o|
o.validates :name, presence: true
o.validates :email, presence: true
o.validates :password, presence: true
end
with_options if: :validate_step_two? do |o|
...
end
private:
def validate_step_one?
self.validate_step == 'validate_first_step'
end
def validate_step_two?
self.validate_step == 'validate_second_step'
end
end
Затем в контроллере:
class MyRegistrationController < ApplicationController
def show
case step
when :first_step
user.validate_step = 'validate_first_step'
when :second_step
user.validate_step = 'validate_second_step'
end
end
end
В контроллере, в действии, где вы строите объект, который нужно назначьте либо validate_first_step
, либо validate_second_step
на основе текущего шага в вашем мастере.
Обратите внимание, что значения и имена, которые я использовал, не очень описательный/осмысленным, и вы бы знали гораздо лучше, как их назвать :)
Отъезд [это] (http://stackoverflow.com/questions/2603464/how-to-create-wizard-forms-in-ruby-on-rails? rq = 1) answer Возможно, вам не нужно делать это вручную. –