Пользовательские пользовательские поля в 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 список, и я не могу просто добавить поля в представлениях. Как добавить пользовательские поля пользователя?

4 ответа

Решение

Мне сказали, чтобы посмотреть в основном 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

Добавление

     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:

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

Вам нужно включить Strong Parameters для devise вместо 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_accesible из модели

Другие вопросы по тегам