Сильные параметры с Rails и Devise
Я использую ветвь rails 4.0 для разработки вместе с ruby 2.0.0p0 и Rails 4.0.0.beta1.
Это вопрос, который я проверяю, правильно ли я делаю это, или если есть другие вещи, которые я должен делать. Я уверен, что многие люди, переезжающие в Rails 4.0, сталкиваются с теми же проблемами (после поиска по аналогичным вещам).
Я прочитал следующие ссылки:
Теперь, используя devise, я создал модель User, я создал следующий контроллер, используя указанные выше gists (и обязательно включил его в файл маршрутов). Мои дополнительные параметры: first_name и last_name.
class Users::RegistrationsController < Devise::RegistrationsController
def sign_up_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
end
def account_update_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password)
end
private :sign_up_params
private :account_update_params
end
Есть ли что-нибудь еще, что я должен делать? Является ли это лучшим способом делать вещи с этого момента (сбрасывая attr_accessor). Мои формы, похоже, работают нормально (как новые, так и обновленные). Гист сказал, что использует "resource_params", но всегда выдавал ошибку "Непереведенные параметры" в моем журнале сервера.
Ответы
Ответ 1
Спасибо за последние обновления в ветке Rails4 от Devise, на самом деле не нужно вставлять "resource_params".
Я создал совершенно новое приложение Rails4 и выполнил основные шаги установки Devise, и мое приложение работает правильно, поэтому, я думаю, вы сделали хорошо.
Но есть модифицированный сущность, который дает вам дополнительные сведения в отношении разрешенных параметров, если вам нужно:
Источник: https://gist.github.com/bluemont/e304e65e7e15d77d3cb9
# controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
before_filter :configure_permitted_parameters
protected
# my custom fields are :name, :heard_how
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit(:name, :heard_how,
:email, :password, :password_confirmation)
end
devise_parameter_sanitizer.for(:account_update) do |u|
u.permit(:name,
:email, :password, :password_confirmation, :current_password)
end
end
end
Ответ 2
Для Rails 5, Разработка 4 Используйте это:
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email, :password, :password_confirmation])
end
end
Ссылка
Ответ 3
Он отлично работает с добавлением модуля в config/initializers
со всеми parameters
, как этот
module DevisePermittedParameters
extend ActiveSupport::Concern
included do
before_filter :configure_permitted_parameters
end
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) }
end
end
DeviseController.send :include, DevisePermittedParameters