Hello,
I followed to the letter the method described here https://github.com/plataformatec/devise#strong-parameters but I still have an error raised...
undefined local variable or method `resource_class' for #UsersController:0x007fdf001ee0d8
I'm using devise: gem 'devise', github: 'plataformatec/devise' and rails 4.2.1.
Any idea as how to do to correct this issue?
Thanks
Can you provide the the full stacktrace? It is very hard to provide any information based only on the error message.
This is the full trace:
undefined local variable or method `resource_class' for #UsersController:0x00000003c55668
Extracted source (around line #10):
def configure_permitted_parameters
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :current_password, :password, :password_confirmation, :name, :surname, :sex) }
end
end
Rails.root: /home/johndoe/intra_ruby
Application Trace | Framework Trace | Full Trace
/home/johndoe/.bundler/ruby/devise-a29fee164449/lib/devise/controllers/helpers.rb:152:in devise_parameter_sanitizer'
app/controllers/application_controller.rb:10:inconfigure_permitted_parameters'
app/controllers/users_controller.rb:19:in update'
actionpack (4.2.1) lib/action_controller/metal/implicit_render.rb:4:insend_action'
actionpack (4.2.1) lib/abstract_controller/base.rb:198:in process_action'
actionpack (4.2.1) lib/action_controller/metal/rendering.rb:10:inprocess_action'
actionpack (4.2.1) lib/abstract_controller/callbacks.rb:20:in block in process_action'
activesupport (4.2.1) lib/active_support/callbacks.rb:117:incall'
activesupport (4.2.1) lib/active_support/callbacks.rb:117:in call'
activesupport (4.2.1) lib/active_support/callbacks.rb:555:inblock (2 levels) in compile'
activesupport (4.2.1) lib/active_support/callbacks.rb:505:in call'
activesupport (4.2.1) lib/active_support/callbacks.rb:505:incall'
activesupport (4.2.1) lib/active_support/callbacks.rb:92:in _run_callbacks'
activesupport (4.2.1) lib/active_support/callbacks.rb:776:in_run_process_action_callbacks'
activesupport (4.2.1) lib/active_support/callbacks.rb:81:in run_callbacks'
actionpack (4.2.1) lib/abstract_controller/callbacks.rb:19:inprocess_action'
actionpack (4.2.1) lib/action_controller/metal/rescue.rb:29:in process_action'
actionpack (4.2.1) lib/action_controller/metal/instrumentation.rb:32:inblock in process_action'
activesupport (4.2.1) lib/active_support/notifications.rb:164:in block in instrument'
activesupport (4.2.1) lib/active_support/notifications/instrumenter.rb:20:ininstrument'
activesupport (4.2.1) lib/active_support/notifications.rb:164:in instrument'
actionpack (4.2.1) lib/action_controller/metal/instrumentation.rb:30:inprocess_action'
actionpack (4.2.1) lib/action_controller/metal/params_wrapper.rb:250:in process_action'
activerecord (4.2.1) lib/active_record/railties/controller_runtime.rb:18:inprocess_action'
actionpack (4.2.1) lib/abstract_controller/base.rb:137:in process'
actionview (4.2.1) lib/action_view/rendering.rb:30:inprocess'
actionpack (4.2.1) lib/action_controller/metal.rb:196:in dispatch'
actionpack (4.2.1) lib/action_controller/metal/rack_delegation.rb:13:indispatch'
actionpack (4.2.1) lib/action_controller/metal.rb:237:in block in action'
actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:74:incall'
actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:74:in dispatch'
actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:43:inserve'
actionpack (4.2.1) lib/action_dispatch/journey/router.rb:43:in block in serve'
actionpack (4.2.1) lib/action_dispatch/journey/router.rb:30:ineach'
actionpack (4.2.1) lib/action_dispatch/journey/router.rb:30:in serve'
actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:819:incall'
warden (1.2.3) lib/warden/manager.rb:35:in block in call'
warden (1.2.3) lib/warden/manager.rb:34:incatch'
warden (1.2.3) lib/warden/manager.rb:34:in call'
rack (1.6.0) lib/rack/etag.rb:24:incall'
rack (1.6.0) lib/rack/conditionalget.rb:38:in call'
rack (1.6.0) lib/rack/head.rb:13:incall'
actionpack (4.2.1) lib/action_dispatch/middleware/params_parser.rb:27:in call'
actionpack (4.2.1) lib/action_dispatch/middleware/flash.rb:260:incall'
rack (1.6.0) lib/rack/session/abstract/id.rb:225:in context'
rack (1.6.0) lib/rack/session/abstract/id.rb:220:incall'
actionpack (4.2.1) lib/action_dispatch/middleware/cookies.rb:560:in call'
activerecord (4.2.1) lib/active_record/query_cache.rb:36:incall'
activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:649:in call'
activerecord (4.2.1) lib/active_record/migration.rb:378:incall'
actionpack (4.2.1) lib/action_dispatch/middleware/callbacks.rb:29:in block in call'
activesupport (4.2.1) lib/active_support/callbacks.rb:88:incall'
activesupport (4.2.1) lib/active_support/callbacks.rb:88:in _run_callbacks'
activesupport (4.2.1) lib/active_support/callbacks.rb:776:in_run_call_callbacks'
activesupport (4.2.1) lib/active_support/callbacks.rb:81:in run_callbacks'
actionpack (4.2.1) lib/action_dispatch/middleware/callbacks.rb:27:incall'
actionpack (4.2.1) lib/action_dispatch/middleware/reloader.rb:73:in call'
actionpack (4.2.1) lib/action_dispatch/middleware/remote_ip.rb:78:incall'
actionpack (4.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in call'
web-console (2.1.2) lib/web_console/middleware.rb:37:incall'
actionpack (4.2.1) lib/action_dispatch/middleware/show_exceptions.rb:30:in call'
railties (4.2.1) lib/rails/rack/logger.rb:38:incall_app'
railties (4.2.1) lib/rails/rack/logger.rb:20:in block in call'
activesupport (4.2.1) lib/active_support/tagged_logging.rb:68:inblock in tagged'
activesupport (4.2.1) lib/active_support/tagged_logging.rb:26:in tagged'
activesupport (4.2.1) lib/active_support/tagged_logging.rb:68:intagged'
railties (4.2.1) lib/rails/rack/logger.rb:20:in call'
actionpack (4.2.1) lib/action_dispatch/middleware/request_id.rb:21:incall'
rack (1.6.0) lib/rack/methodoverride.rb:22:in call'
rack (1.6.0) lib/rack/runtime.rb:18:incall'
activesupport (4.2.1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in call'
rack (1.6.0) lib/rack/lock.rb:17:incall'
actionpack (4.2.1) lib/action_dispatch/middleware/static.rb:113:in call'
rack (1.6.0) lib/rack/sendfile.rb:113:incall'
railties (4.2.1) lib/rails/engine.rb:518:in call'
railties (4.2.1) lib/rails/application.rb:164:incall'
rack (1.6.0) lib/rack/content_length.rb:15:in call'
puma (2.11.2) lib/puma/server.rb:507:inhandle_request'
puma (2.11.2) lib/puma/server.rb:375:in process_client'
puma (2.11.2) lib/puma/server.rb:262:inblock in run'
puma (2.11.2) lib/puma/thread_pool.rb:104:in call'
puma (2.11.2) lib/puma/thread_pool.rb:104:inblock in spawn_thread'
Have you forgotten the if: :devise_controller? option when declaring your filter?
before_action :configure_permitted_parameters, if: :devise_controller?
this is in my application_controller.rb:
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :current_password, :password, :password_confirmation, :name, :surname, :sex) }
end
and this is in my update of users_controller.rb:
@user = User.find(params[:id])
@user.update_attributes(configure_permitted_parameters)
Ah, that is it. Don't use configure_permitted_parameters there. It is meant to be used only inside Devise controllers (which yours isn't).
OK, so how would I use it inside my users_controller.rb ?
You can put { |u| u.permit(:email, :current_password, :password, :password_confirmation, :name, :surname, :sex) } inside a method and use it in both your controller and in the configure parameter call.
I don't understand, in your tutorial https://github.com/plataformatec/devise#strong-parameters you show that you are putting the configure_permitted_parameters in the ApplicationController.
Add this to your control_helper.rb file.
def resource_name
:user
end
def resource
@resource ||= User.new
end
def resource_class
User
end
def devise_mapping
@devise_mapping ||= Devise.mappings[:user]
end
The same to #2451 ,the wiki may help you.
Most helpful comment
Add this to your control_helper.rb file.