2013-10-14 4 views
0

Я пытаюсь добавить одно поле на мою страницу регистрации, которая использует devise. Я выполнил инструкции в документе Devise. Новое поле - это поле «роль». Я уже успешно перенес его в базу данных. Теперь я пытаюсь сделать так, чтобы регистрация работала. Вот новый ApplicationController:Как добавить настраиваемое поле для регистрации в Rails 4?

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 

    def devise_parameter_sanitizer 
     if resource_class == User 
      User::ParameterSanitizer.new(User, :user, params) 
     else 
      super # Use the default one 
     end 
    end 
end 

А вот измененная модель пользователя:

class User::ParameterSanitizer < Devise::ParameterSanitizer 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    def sign_up 
    default_params.permit(:email, :role) 
    end 
end 

После того, как я добавил эти два файла, сервер может даже не нагрузки. Как успешно добавить поле роли?

EDIT

Вот мой routes.rb файл

devise_for :users 
root 'static_pages#home' 
get 'student' => 'static_pages#index' 
+0

Вы создавали дизайнерские виды? – rb512

+0

Да, но я добавил поле формы в форму: <% = f.input: role%> – Philip7899

+0

вы можете показать свои маршруты.rb и расширенный контроллер разработки? – rb512

ответ

5

Вы также можете использовать следующий подход, чтобы добавить пользовательское поле в таблице пользователей Разрабатывают.

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 

    before_filter :configure_permitted_parameters, if: :devise_controller? 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:firstname, :lastname, :email, :password, :password_confirmation) } # The :firstname and :lastname are my custom fields. 
    end 

    protect_from_forgery with: :exception 
end 
+0

Спасибо! Это работает, но в документации по разработке говорится, что это «ленивый» способ сделать это. Ты знаешь почему? Достаточно ли этого достаточно для производства? – Philip7899

+0

Я не знал, почему это ленивый способ, но я думаю, вы можете использовать его на производственном сервере. –

+0

Еще одна вещь, которую я прочитал при разработке doc, тогда я обнаружил, что вы используете код, который должен использоваться, только если у вас более одной модели разработки. –

Смежные вопросы