Добавление атрибута имени к `User` в Devise - PullRequest
21 голосов
/ 17 августа 2011

Я пытаюсь добавить атрибут name в модель 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.Должен ли я что-то добавить в User контроллер Devise или что-то еще?Спасибо!

Ответы [ 8 ]

18 голосов
/ 17 августа 2011

в вашей модели пользователя найдите;

 attr_accessible :email, :password, :password_confirmation, :remember_me

и добавьте: имя в конце

10 голосов
/ 09 сентября 2014

Добавьте этот код в 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
6 голосов
/ 26 мая 2017

Для рельсов 5 (на самом деле разработка 4)

Проверено на: рельсы 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 (точнее, он не поддерживается в devise 4, который является ожидаемой версией устройства в контексте Rails 5): используйте devise_parameter_sanitizer.permit, чтобы избежать undefined method 'for' for #<Devise::ParameterSanitizer error

6 голосов
/ 25 февраля 2014

Для рельсов 4

Используйте вот так

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

Добавьте дополнительные поля в конце.

2 голосов
/ 17 августа 2011

Да. Добавьте :name к attr_accessible в пользовательской модели

1 голос
/ 06 апреля 2015

Напишите этот код внутри класса ApplicationController ...

before_action :configure_permitted_parameters, if:  :devise_controller?

      protected

      def configure_permitted_parameters
        devise_parameter_sanitizer.for(:sign_up) << :name  
0 голосов
/ 20 февраля 2016
 private

   def sign_up_params
     params.require(:user).permit(:name,:email,:gender,:age,:password,:password_confirmation) if params[:user].present?
   end

Добавьте это в контроллер, который расширяет стандартный контроллер регистрации devise

0 голосов
/ 14 августа 2015

раскомментируйте часть сгенерированного кода:

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
...