Подтвердить что ты не робот

Сильные параметры с 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", но всегда выдавал ошибку "Непереведенные параметры" в моем журнале сервера.

4b9b3361

Ответ 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