Не могу сохранить информацию о регистрации пользователя при использовании devise и wicked
Я новичок в платформе rails... У меня проблема с сохранением информации о регистрации пользователя при нажатии регистрации в моей форме.... Я не получаю ошибки, но при проверке консоли rails вся информация о пользователе приравнивается к нулю... не могу понять, почему. мой код контроллера шагов пользователя
class UserStepsController < ApplicationController
include Wicked::Wizard
steps :finishing_step
def show
@user = current_user
render_wizard
end
def update
@user = current_user
if @user.save
redirect_to root_path
else
render_wizard
end
end
def user_params
params.require(:user).permit(:first_name, :middle_name, :last_name, :address_first_line, :address_second_line, :city, :nationality)
end
private
def redirect_to_finish_wizard
redirect_to root_path, notice: "Thanks for signing up."
end
end
ниже приведен код для контроллера пользователя
class UsersController < ApplicationController
def create
@user = User.new(params[:user])
if @user.save
redirect_to root_path
else
render_wizard
end
end
end
ниже приведен код моей простой формы с информацией о регистрации пользователя
<%= form_for User.new, url: wizard_path do |f| %>
<div><%= f.label :first_name, "First Name" %><br />
<%= f.text_field :first_name %></div>
<div><%= f.label :middle_name, "Middle Name" %><br />
<%= f.text_field :middle_name %></div>
<div><%= f.label :last_name, "Last Name" %><br />
<%= f.text_field :last_name %></div>
<div><%= f.label :phone_number, "Phone Number" %><br />
<%= f.text_field :phone_number %></div>
<div><%= f.label :date_of_birth, "Date of Birth" %><br />
<%= f.date_select :date_of_birth, start_year: 1900 %></div>
<div><%= f.label :address_first_line, "Address (first line)" %><br />
<%= f.text_field :address_first_line %></div>
<div><%= f.label :address_second_line, "Address (second line)" %><br />
<%= f.text_field :address_second_line %></div>
<div><%= f.label :city, "City" %><br />
<%= f.text_field :city %></div>
<div><%= f.label :nationality, "Nationality" %><br />
<%= country_select(:user, :nationality, {selected: "UG"}) %></div>
<div>
<%= f.label :avatar %>
<%= f.file_field :avatar %>
</div>
<div>
<%= f.label :terms_of_service, "Agree to Terms of Service" %> <br>
<%= f.check_box :terms_of_service %>
</div>
<%= f.submit "Register", class: "btn btn-primary" %>
<% end %>
за любую помощь, спасибо заранее
1 ответ
Я думаю, что в вашей концепции есть некоторые ошибки. Мастер работает ПОСЛЕ регистрации вашего пользователя. Таким образом, в основном вам нужно сначала создать своего пользователя без мастера.
- Создание вашего пользователя
Если вы используете Devise с вашей моделью User
, у вас уже есть пользовательский контроллер где-то. На самом деле, ваш класс UsersController бесполезен, если вы используете Devise.
Поэтому, если вы хотите перенаправить на шаг мастера после регистрации, вам необходимо переопределить контроллер регистрации Devise (doc: Перенаправление на определенную страницу). Для этого создайте новый контроллер следующим образом:
class RegistrationsController < Devise::RegistrationsController
protected
def after_sign_up_path_for(resource)
user_steps_path(:finishing_step) #add proper route
end
end
У меня нет содержимого вашего файла config / route.rb, но вам нужно что-то вроде этого:
resources :user_steps
- Добавление шагов
Wicked Wizard работает следующим образом: - Один контроллер с 2 действиями (показать и обновить) - N просмотров за N шагов (1 шаг = 1 просмотр, 42 шага = 42 просмотра)
Вы можете получить доступ к названию вашего текущего шага в действиях показать и обновить, используя step
,
render_wizard
сделать вид текущего шагаrender_wizard @user
визуализировать следующий шаг (или текущий шаг, если есть какая-либо ошибка)
- Использование сильных параметров
В вашем контроллере вы никогда не используете user_params
, Таким образом, в вашем действии обновления вы никогда не используете @user с параметрами из вашей формы. current_user
не вызывает user_params для вас.
Кроме того, существует большая разница между save
а также update_attributes
и я думаю, что вы хотите использовать второе в вашем действии обновления.
Лучше размещать user_params также в приватном разделе.
- Окончательная форма вашего контроллера
Ваш контроллер должен выглядеть примерно так:
class UserStepsController < ApplicationController
include Wicked::Wizard
steps :finishing_step
def show
@user = current_user
render_wizard
end
def update
@user = current_user
if @user.update_attributes(user_params)
# because you only have one step, you don't need render_wizard @user
redirect_to_finish_wizard
else
render_wizard
end
end
private
def user_params
params.require(:user).permit(:first_name, :middle_name, :last_name, :address_first_line, :address_second_line, :city, :nationality)
end
def redirect_to_finish_wizard
redirect_to root_path, notice: "Thanks for signing up."
end
end
- Читать документ
Я думаю, что вы пропустили несколько советов в злой док. Может быть, вы должны перечитать это. Злой док