Mocne parametry z szynami i Devise

Używam gałęzi rails 4.0 devise wraz z ruby 2.0. 0P0 i Rails 4.0.0.beta1.

To jest pytanie, w którym sprawdzam, czy robię to we właściwy sposób, czy są inne rzeczy, które powinienem robić. Jestem pewien, że wiele osób poruszających się na Rails 4.0 boryka się z tymi samymi problemami (po googlowaniu podobnych rzeczy).

Przeczytałem następujące linki:

Teraz używając devise stworzyłem Model użytkownika, stworzyłem następujący kontroler używając powyższych GIST (i upewniłem się, że umieściłem go w moim pliku routes). Moje dodatkowe parametry to first_name i 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
Czy jest coś jeszcze, co powinienem robić? Czy to jest najlepszy sposób na robienie rzeczy od teraz (od upuszczenia attr_accessor). Moje formularze wydają się działać dobrze(zarówno nowy, jak i aktualizacja). GIST powiedział, aby użyć "resource_params", ale to zawsze dawało błąd "Unpermitted parameters" w moim dzienniku serwera.
Author: Community, 2013-05-05

3 answers

Dzięki za najnowsze aktualizacje na rails4 gałęzi Devise, tak naprawdę nie trzeba wstawiać 'resource_params'.

Stworzyłem zupełnie nową aplikację Rails4 i wykonałem podstawowe kroki instalacji Devise, a moja aplikacja działa poprawnie, więc myślę, że dobrze się spisałeś.

Ale istnieje zmodyfikowany gist, który daje dodatkowe szczegóły w zakresie dozwolonych parametrów, jeśli potrzebujesz:

Źródło: 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
 67
Author: Zoltan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-03 23:55:05

Dla Rails 5, Devise 4 Użyj tego:

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

Odniesienie

 26
Author: Ronak Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-10 08:03:35

Działa bardzo ładnie z dodaniem modułu w config/initializers z wszystkimi parameters Jak to

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
 7
Author: Rokibul Hasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-07 11:39:47