Пользовательские пользовательские поля в 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 из модели