Ответ 1
в вашей пользовательской модели найдите
attr_accessible :email, :password, :password_confirmation, :remember_me
и добавьте: имя в конце
Я пытаюсь добавить атрибут имени в модель User, предоставленную Devise. Я добавил столбец "имя" в мою базу данных и изменил вид регистрации так, чтобы он запрашивал имя пользователя:
<h2>Sign up</h2>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<p><%= f.label :name %><br />
<%= f.text_field :name %></p>
<p><%= f.label :email %><br />
<%= f.email_field :email %></p>
<p><%= f.label :password %><br />
<%= f.password_field :password %></p>
<p><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></p>
<p><%= f.submit "Sign up" %></p>
<% end %>
<%= render :partial => "devise/shared/links" %>
Он позволяет мне войти в систему, но когда я проверю базу данных после этого, name: nil
. Должен ли я добавить что-то в Devise User
контроллер или что-то еще? Спасибо!
в вашей пользовательской модели найдите
attr_accessible :email, :password, :password_confirmation, :remember_me
и добавьте: имя в конце
Добавьте этот код в application_controller.rb
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) }
devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) }
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) }
end
Используйте это как
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation, :remember_me) }
devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :username, :email, :password, :remember_me) }
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) }
end
Добавьте дополнительные поля в конец.
Да. Добавить :name
в attr_accessible
в модели пользователя
Протестировано для: рельсов 5.1.0 (разработка 4.2.1)
Нет необходимости работать с контроллерами разработки.
Просто добавьте следующее в свой application_controller.rb
:
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
end
devise_parameter_sanitizer.for
больше не работает с Rails 5 (вернее, он не поддерживается в разработке 4, который является ожидаемой версией разработки в контексте Rails 5): используйте devise_parameter_sanitizer.permit
, чтобы избежать ошибки undefined method 'for' for #<Devise::ParameterSanitizer
Запишите этот код внутри класса ApplicationController...
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :name
раскомментирует часть сгенерированного кода:
class Users::RegistrationsController < Devise::RegistrationsController
before_filter :configure_sign_up_params, only: [:create]
protected
def configure_sign_up_params
devise_parameter_sanitizer.for(:sign_up) << :name
end
end
private
def sign_up_params
params.require(:user).permit(:name,:email,:gender,:age,:password,:password_confirmation) if params[:user].present?
end
Добавьте это в контроллер, который расширяет стандартный контроллер регистрации по умолчанию