Я использую devise для регистрации пользователей, что означает, что по умолчанию новый пользователь регистрируется через Registrations_controller. Итак, нажав кнопку «Зарегистрироваться», пользователь перенаправляется на new_user_registration path.
Однако моя регистрационная форма состоит из двух шагов. На первом этапе (new_user_registration) я запрашиваю имя и пароль. На втором этапе (users_controller), когда пользователь сохраняется, я запрашиваю адрес. Это я делаю с драгоценным камнем мастера:
def create
@user = User.new(params[:user])
if @user.save
session[:user_id] = @user.id
redirect_to user_steps_path
else
render :new
end
end
Итак, это своего рода частичные проверки, но я не могу проверить в зависимости от шага, так как первая часть моей формы обрабатывается через контроллер регистрации. Однако вторая часть находится в файле users_controller. Здесь все усложняется, и я хотел бы знать, могу ли я проверить в зависимости от контроллера. Нравиться:
validates :first_name, presence: true, if: -> { new_user_registration_path }
validates :last_name, presence: true, if: -> { new_user_registration_path }
validates :street, presence: true, if: -> { new_user_path }
Я знаю, в таком виде это не имеет смысла, но, может быть, это поможет понять мои мысли. Кроме того, возможно, я могу работать с чем-л. нравится:
validates :first_name, presence: true, if: -> { @user.save }
validates :last_name, presence: true, if: -> { @user.save }
validates :street, presence: true, if: -> { @user.update}
В общем, при создании нового пользователя я бы проверял наличие имени и пароля. И когда затем добавлю адрес (это действие обновления для пользователя), я проверю, присутствует ли адрес. Кто-нибудь сталкивался с такими формами?
Еще мысль, может быть, я могу пропустить контроллер регистраций, перенаправив пользователя напрямую и создав два шага для частичных проверок? Но поскольку я работаю с разработкой, я не знаю, смогу ли я просто пройти через контроллер пользователей, пропустив путь new_user_registration. Сделал, как советовали на злом туториале, но все равно попал в контроллер регистраций:
def create
super
end
def update
super
end
Спасибо!