Search code examples
ruby-on-railsrubysurveyor-gem

Surveyor gem NoMethodError


i'm stuck setting up a simple rails survey using the surveyor gem. I am following the basic instructions given here, on a new rails project: http://nubic.github.io/surveyor/

additionally, my gemfile includes the following in order to deal with rails 4 issues:

gem 'surveyor', :git => 'git://github.com/NUBIC/surveyor.git', :branch => 'rails4'
gem 'formtastic'

when i try to run the demo survey (kitchen sink), i end up with the following error:

NoMethodError in SurveyorController#edit
undefined method `with_sections_and_questions' for #<Class:0x007fe84d519450>

How to fix this?


SOLUTION: i have submitted a bugreport with the authors of surveyor. It seems that the gem is still awaiting an upgrade for rails 4. In the meantime, this development branch can be used to get things going:

gem 'surveyor', github: 'caboteria/surveyor', branch: 'rails4'
gem 'protected_attributes'

edit: full trace:

activerecord (4.0.0) lib/active_record/dynamic_matchers.rb:22:in `method_missing'
/usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems/surveyor-70ed3f257416/lib/surveyor/surveyor_controller_methods.rb:63:in `edit'
app/controllers/surveyor_controller.rb:21:in `edit'
actionpack (4.0.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (4.0.0) lib/abstract_controller/base.rb:189:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (4.0.0) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
activesupport (4.0.0) lib/active_support/callbacks.rb:443:in `_run__290069008777388403__process_action__callbacks'   
activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks'
actionpack (4.0.0) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
activesupport (4.0.0) lib/active_support/notifications.rb:159:in `block in instrument'
activesupport (4.0.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (4.0.0) lib/active_support/notifications.rb:159:in `instrument'
actionpack (4.0.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
actionpack (4.0.0) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
activerecord (4.0.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (4.0.0) lib/abstract_controller/base.rb:136:in `process'
actionpack (4.0.0) lib/abstract_controller/rendering.rb:44:in `process'
actionpack (4.0.0) lib/action_controller/metal.rb:195:in `dispatch'
actionpack (4.0.0) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
actionpack (4.0.0) lib/action_controller/metal.rb:231:in `block in action'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `call'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:80:in `dispatch'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:48:in `call'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:71:in `block in call'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `each'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `call'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:655:in `call'
railties (4.0.0) lib/rails/engine.rb:511:in `call'
railties (4.0.0) lib/rails/railtie/configurable.rb:30:in `method_missing'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:71:in `block in call'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `each'
actionpack (4.0.0) lib/action_dispatch/journey/router.rb:59:in `call'
actionpack (4.0.0) lib/action_dispatch/routing/route_set.rb:655:in `call'
rack (1.5.2) lib/rack/etag.rb:23:in `call'
rack (1.5.2) lib/rack/conditionalget.rb:25:in `call'
rack (1.5.2) lib/rack/head.rb:11:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/flash.rb:241:in `call'
rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/cookies.rb:486:in `call'
activerecord (4.0.0) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
activerecord (4.0.0) lib/active_record/migration.rb:369:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
activesupport (4.0.0) lib/active_support/callbacks.rb:373:in `_run__3872098118566400954__call__callbacks'
activesupport (4.0.0) lib/active_support/callbacks.rb:80:in `run_callbacks'
actionpack (4.0.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/reloader.rb:64:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/remote_ip.rb:76:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.0.0) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `block in call'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `block in tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:25:in `tagged'
activesupport (4.0.0) lib/active_support/tagged_logging.rb:67:in `tagged'
railties (4.0.0) lib/rails/rack/logger.rb:21:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.5.2) lib/rack/methodoverride.rb:21:in `call'
rack (1.5.2) lib/rack/runtime.rb:17:in `call'
activesupport (4.0.0) lib/active_support/cache/strategy/local_cache.rb:83:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/static.rb:64:in `call'
railties (4.0.0) lib/rails/engine.rb:511:in `call'
railties (4.0.0) lib/rails/application.rb:97:in `call'
rack (1.5.2) lib/rack/lock.rb:17:in `call'
rack (1.5.2) lib/rack/content_length.rb:14:in `call'
rack (1.5.2) lib/rack/handler/webrick.rb:60:in `service'
/usr/local/rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service'
/usr/local/rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run'
/usr/local/rvm/rubies/ruby-2.0.0-p247/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread'
Request

Parameters:

{"survey_code"=>"kitchen-sink-survey",
  "response_set_code"=>"tyr1KN5kAw"}

Edit 2: issued grep as asked

$ grep with_sections_and_questions $(bundle show surveyor) -r – 
/usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems/surveyor-     70ed3f257416/lib/surveyor/models/response_set_methods.rb:        { :questions =>     survey.with_sections_and_questions.sections.map(&:questions).flatten.compact.size,
/usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems/surveyor-70ed3f257416/lib/surveyor/models/response_set_methods.rb:        qs = survey.with_sections_and_questions.sections.map(&:questions).flatten
/usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems/surveyor-70ed3f257416/lib/surveyor/surveyor_controller_methods.rb:        @survey = Survey.with_sections_and_questions.find_by_id(@response_set.survey_id)
/usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems/surveyor-70ed3f257416/spec/models/survey_spec.rb:      survey.with_sections_and_questions.sections.map(&:questions).flatten.should have(4).questions
/usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems/surveyor-70ed3f257416/spec/models/survey_spec.rb:      survey.with_sections_and_questions.sections.map(&:questions).flatten.should == [q4,q1,q3,q2]
grep: –: No such file or directory

edit 3: more info added:

$ grep with_sections_and_questions /usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems/ -r;
/usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems//surveyor-70ed3f257416/lib/surveyor/models/response_set_methods.rb:        { :questions => survey.with_sections_and_questions.sections.map(&:questions).flatten.compact.size, 
/usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems//surveyor-70ed3f257416/lib/surveyor/models/response_set_methods.rb:        qs = survey.with_sections_and_questions.sections.map(&:questions).flatten
/usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems//surveyor-70ed3f257416/lib/surveyor/surveyor_controller_methods.rb:        @survey = Survey.with_sections_and_questions.find_by_id(@response_set.survey_id)
/usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems//surveyor-70ed3f257416/spec/models/survey_spec.rb:      survey.with_sections_and_questions.sections.map(&:questions).flatten.should have(4).questions
/usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems//surveyor-70ed3f257416/spec/models/survey_spec.rb:      survey.with_sections_and_questions.sections.map(&:questions).flatten.should == [q4,q1,q3,q2]

Solution

  • The error:

    undefined method `with_sections_and_questions' for #<Class:0x007fe84d519450>
    

    says that the class Class has no instance method #with_sections_and_questions. You shall to search the method #with_sections_and_questions over all gems involved in your project. Try search as follows:

    grep with_sections_and_questions /usr/local/rvm/gems/ruby-2.0.0-p247/bundler/gems/ -r
    

    If don't find out the definitions of the method similar to:

    def with_sections_and_questions
    

    you have to open an issue on the problem to developers on their issue page.