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:
- Devise and Strong Parametry
- https://gist.github.com/kazpsp/3350730
- https://github.com/plataformatec/devise/tree/rails4#strong-parameters
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. 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
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
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
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