Как добавить поле имени пользователя в devise gem?
вот что я пытался,
rails g migration add_username_to_hrs
bundle exec rake db:migrate
добавил
attr_accessible:username
перезапустить сервер
мой add_username_to_hr.
class AddUsernameToAuthorize < ActiveRecord::Migration
def change
add_column :authorizes, :username, :string
end
end
неопределенный метод "имя пользователя" для #
вопрос: как добавить имя пользователя поле в моем драгоценном камне?
6 ответов
Я сделал то же самое. Пожалуйста, выполните следующие действия:
rails generate migration add_username_to_users username:string:uniq
rake db:migrate
добавить
attr_accessible :username
-
в 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
-
в config / initializers если вы хотите заменить
email
byusernname
config.authentication_keys = [ :username ] config.case_insensitive_keys = [ :username ] config.strip_whitespace_keys = [ :username ]
обновить вид.
Примечание если attr_accessible :username
дает ошибку try attr_accessor :username
в разработать wiki для позволяя пользователям войти с именем пользователя, может быть, это может помочь вам?
Если вы используете rails 4, то поместите ниже код в Application controller
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :username
end
end
если вы используете rails 4, выполните следующие действия:
rails g migration AddUserNameToAuthorize
rake db:migrate
-
введите этот код в
application_controller.rb
принять параметр username дляsign_in
,sign_up
, а такжеaccount_update
:class ApplicationController < ActionController::Base protect_from_forgery with: :exception def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:email, :password,:username) } devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation,:username) } devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation,:username) } end end
Devise фактически добавляет поле к модели, которую вы указали во время настройки devise. Если у вас есть добавить миграцию в эту модель. Например, вы использовали devise для модели пользователя, затем вы можете создать миграцию для добавления имени пользователя в модель пользователя и запустить db:migrate и добавить attr_accessible :username to model, если вы используете rails
вы должны добавить имя пользователя в модель, которую вы дали ниже command
rails g devise <modelname>
Как только вы закончите, вам нужно выполнить вышеуказанные шаги, но вам нужно изменить файл конфигурации devise, чтобы искать имя пользователя для входа вместо электронной почты. Затем перезапустите rails server, и все будет в порядке.