Я использую devise для регистрации пользователей, это означает, что по умолчанию новый пользователь регистрируется через registrations_controller. Поэтому, нажав кнопку «Зарегистрироваться», пользователь перенаправляется на new_user_registration path.
Моя форма регистрации, однако, состоит из двух шагов. На первом этапе (new_user_registration) я спрашиваю имя и пароль. На втором этапе (users_controller), когда пользователь сохраняется, я спрашиваю адрес. Это я делаю с мастером gem:
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}
Таким образом, при создании нового пользователя я бы проверил наличие имени и пароля. И когда я добавлю адрес (это обновление для пользователя), я проверю, присутствует ли адрес. У кого-нибудь есть опыт работы с такими формами?
Еще одна мысль, может быть, я могу пропустить регистрацию контроллера, перенаправив его непосредственно к пользователю и создав два шага для частичной проверки? Но так как я работаю с devise, я не знаю, смогу ли я просто go контролировать пользователей, пропуская путь new_user_registration. Я сделал это, как советовали по злому уроку, но все равно оказался в контроллере регистрации:
def create
super
end
def update
super
end
Спасибо!