Неопределенная локальная переменная или метод `resource_class'в devise
Я пытаюсь добавить атрибут с именем пользователя в devise, но rails показывает мне ошибку в следующей строке кода. Я использую rails 4.0.0 и devise 3.
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation) }
end
Приложение контроллера
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_action :configure_permitted_parameters if :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :password_confirmation) }
end
end
3 ответа
Решение
Пытаться:
before_action :configure_permitted_parameters, if: :devise_controller?
или же
before_action :configure_permitted_parameters, :if => :devise_controller?
Ссылка: https://github.com/plataformatec/devise/issues/2372 & http://guides.rubyonrails.org/active_record_callbacks.html
Вы набрали запятую раньше, если:
before_action :configure_permitted_parameters, if: :devise_controller?
У меня такая же проблема здесь. Проблема в том, что код уже был установлен как ваши ответы. Что не так? Должен ли я искать в другом месте?
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :set_locale
before_action :set_instances
before_action :configure_permitted_parameters, if: :devise_controller?
before_action :mixpanel
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
def redirect_to_back
begin
redirect_to :back
rescue ActionController::RedirectBackError => e
redirect_to root_path
end
end
def set_instances
@new_event ||= Event.new(title: ".......", capacity: 50, start_date: Time.zone.now, start_time: Time.zone.now, end_time: Time.zone.now)
@featured_quizz ||= Questionnaire.where('featured IS TRUE')
end
helper_method :resource_name, :resource, :devise_mapping
protected
def resource_name
:user
end
def resource
@resource ||= User.new
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << [:name, :firstname, :lastname, :phone]
devise_parameter_sanitizer.for(:account_update) << [:name, :firstname, :lastname, :image, :phone]
end
end
И где это показывает ошибку _links.html.slim
неопределенная локальная переменная или метод `resource_class'для #<#: 0x007f82f02c8218>
.row.text-center
.col-md-10.col-md-offset-1
- if devise_mapping.omniauthable?
- resource_class.omniauth_providers.each do |provider|
= link_to omniauth_authorize_path(resource_name, provider), class:"btn btn-fb btn-block callout callout-fb"
span.fa.fa-facebook-official<>
span Connectez vous avec #{provider.to_s.titleize}
Это синтаксическая ошибка впереди?
li = link_to "Votre Compte", resource, as: resource_name, url: session_path(resource_name), remote: true, data: { toggle: "modal", target: "#login-modal" }