Пользовательские поля в Devise 3 под Rails 4

Я использую релиз-кандидат Devise 3, чтобы использовать его с Rails 4. В Rails 3.2 я имел возможность добавить настраиваемое поле в свою модель User, просто добавив это поле в Registration/Edit.html. erb и Registration/new.html.erb (после выполнения правильной миграции). Затем я бы просто добавил это поле в список attr_accessible полей в модели.

Однако в Rails 4 нет списка attr_accessible, и я не могу просто добавлять поля в представления. Как добавить пользовательские поля пользователя?


person at.    schedule 31.05.2013    source источник


Ответы (4)


Добавление

     def configure_permitted_parameters
         devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username, :email) }
         devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation) }
         devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :password_confirmation, :current_password) }
     end

Чтобы у меня работал applicationcontroller.

person Spencer    schedule 23.07.2013
comment
Вам также может понадобиться: before_action :configure_permitted_parameters, if: :devise_controller? - person stephenmurdoch; 05.08.2013

Мне сказали заглянуть в основной README на странице github, и там это было. Легкий.

class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :username
  end
end
person at.    schedule 31.05.2013

Если вы хотите разрешить дополнительные параметры, вы можете сделать это с помощью простого перед фильтром в вашем

Контроллер приложений:

class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :username
  end
end
person aniruddha Birajdar    schedule 18.10.2013

Вам нужно включить Strong Parameters для разработки вместо attr_accessible, для этого вам нужно создать новый инициализатор, например:

DeviseController.class_eval do
  def resource_params
    unless params[resource_name].blank?
      params.require(resource_name).permit(:email, :password, :password_confirmation, :remember_me)
    end
  end
end

Убедитесь, что вы клонировали гем из ветки rails4 (plataformatec/devise). Удалить attr_accessible из модели

person Muhammad Sannan Khalid    schedule 31.05.2013
comment
для настройки сильных параметров следуйте этому руководству github.com/rails/strong_parameters - person Muhammad Sannan Khalid; 31.05.2013