koudoku icon indicating copy to clipboard operation
koudoku copied to clipboard

undefined method `plan_price'

Open nikolay12 opened this issue 9 years ago • 10 comments

I forked Daniel Kenoe's Devise application and added koudoku. Here is my latest commit. I am getting "NoMethodError - undefined method `plan_price' " when I try to load the pricing plans. Here is the full error stack:

Processing by Koudoku::SubscriptionsController#index as HTML
  Plan Load (0.3ms)  SELECT `plans`.* FROM `plans`  ORDER BY `plans`.`display_order` ASC
  Rendered /Users/nnikolo/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/koudoku-1.1.2/app/views/koudoku/subscriptions/_pricing_table.html.erb (24.2ms)
  Rendered /Users/nnikolo/.rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/koudoku-1.1.2/app/views/koudoku/subscriptions/index.html.erb within layouts/application (28.8ms)
Completed 500 Internal Server Error in 41ms

NoMethodError - undefined method `plan_price' for #<#<Class:0x007ff2e91c9da8>:0x007ff2e5e537a8>:
  koudoku (1.1.2) app/views/koudoku/subscriptions/_pricing_table.html.erb:7:in `block in ___sers_nnikolo__rbenv_versions_______lib_ruby_gems_______gems_koudoku_______app_views_koudoku_subscriptions__pricing_table_html_erb___4271332556551337805_70340607855680'
  activerecord (4.2.0) lib/active_record/relation/delegation.rb:46:in `each'
  koudoku (1.1.2) app/views/koudoku/subscriptions/_pricing_table.html.erb:2:in `___sers_nnikolo__rbenv_versions_______lib_ruby_gems_______gems_koudoku_______app_views_koudoku_subscriptions__pricing_table_html_erb___4271332556551337805_70340607855680'
  actionview (4.2.0) lib/action_view/template.rb:145:in `block in render'
  activesupport (4.2.0) lib/active_support/notifications.rb:166:in `instrument'
  actionview (4.2.0) lib/action_view/template.rb:333:in `instrument'
  actionview (4.2.0) lib/action_view/template.rb:143:in `render'
  actionview (4.2.0) lib/action_view/renderer/partial_renderer.rb:339:in `render_partial'
  actionview (4.2.0) lib/action_view/renderer/partial_renderer.rb:310:in `block in render'
  actionview (4.2.0) lib/action_view/renderer/abstract_renderer.rb:39:in `block in instrument'
  activesupport (4.2.0) lib/active_support/notifications.rb:164:in `block in instrument'
  activesupport (4.2.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (4.2.0) lib/active_support/notifications.rb:164:in `instrument'
  actionview (4.2.0) lib/action_view/renderer/abstract_renderer.rb:39:in `instrument'
  actionview (4.2.0) lib/action_view/renderer/partial_renderer.rb:309:in `render'
  actionview (4.2.0) lib/action_view/renderer/renderer.rb:47:in `render_partial'
  actionview (4.2.0) lib/action_view/helpers/rendering_helper.rb:35:in `render'
  koudoku (1.1.2) app/views/koudoku/subscriptions/index.html.erb:2:in `___sers_nnikolo__rbenv_versions_______lib_ruby_gems_______gems_koudoku_______app_views_koudoku_subscriptions_index_html_erb__2870308296148279675_70340607903060'
  actionview (4.2.0) lib/action_view/template.rb:145:in `block in render'
  activesupport (4.2.0) lib/active_support/notifications.rb:166:in `instrument'
  actionview (4.2.0) lib/action_view/template.rb:333:in `instrument'
  actionview (4.2.0) lib/action_view/template.rb:143:in `render'
  actionview (4.2.0) lib/action_view/renderer/template_renderer.rb:54:in `block (2 levels) in render_template'
  actionview (4.2.0) lib/action_view/renderer/abstract_renderer.rb:39:in `block in instrument'
  activesupport (4.2.0) lib/active_support/notifications.rb:164:in `block in instrument'
  activesupport (4.2.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (4.2.0) lib/active_support/notifications.rb:164:in `instrument'
  actionview (4.2.0) lib/action_view/renderer/abstract_renderer.rb:39:in `instrument'
  actionview (4.2.0) lib/action_view/renderer/template_renderer.rb:53:in `block in render_template'
  actionview (4.2.0) lib/action_view/renderer/template_renderer.rb:61:in `render_with_layout'
  actionview (4.2.0) lib/action_view/renderer/template_renderer.rb:52:in `render_template'
  actionview (4.2.0) lib/action_view/renderer/template_renderer.rb:14:in `render'
  actionview (4.2.0) lib/action_view/renderer/renderer.rb:42:in `render_template'
  actionview (4.2.0) lib/action_view/renderer/renderer.rb:23:in `render'
  actionview (4.2.0) lib/action_view/rendering.rb:100:in `_render_template'
  actionpack (4.2.0) lib/action_controller/metal/streaming.rb:217:in `_render_template'
  actionview (4.2.0) lib/action_view/rendering.rb:83:in `render_to_body'
  actionpack (4.2.0) lib/action_controller/metal/rendering.rb:32:in `render_to_body'
  actionpack (4.2.0) lib/action_controller/metal/renderers.rb:37:in `render_to_body'
  actionpack (4.2.0) lib/abstract_controller/rendering.rb:25:in `render'
  actionpack (4.2.0) lib/action_controller/metal/rendering.rb:16:in `render'
  actionpack (4.2.0) lib/action_controller/metal/instrumentation.rb:41:in `block (2 levels) in render'
  activesupport (4.2.0) lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
   () Users/nnikolo/.rbenv/versions/2.2.0/lib/ruby/2.2.0/benchmark.rb:303:in `realtime'
  activesupport (4.2.0) lib/active_support/core_ext/benchmark.rb:12:in `ms'
  actionpack (4.2.0) lib/action_controller/metal/instrumentation.rb:41:in `block in render'
  actionpack (4.2.0) lib/action_controller/metal/instrumentation.rb:84:in `cleanup_view_runtime'
  activerecord (4.2.0) lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime'
  actionpack (4.2.0) lib/action_controller/metal/instrumentation.rb:40:in `render'
  actionpack (4.2.0) lib/action_controller/metal/implicit_render.rb:10:in `default_render'
  actionpack (4.2.0) lib/action_controller/metal/implicit_render.rb:5:in `send_action'
  actionpack (4.2.0) lib/abstract_controller/base.rb:198:in `process_action'
  actionpack (4.2.0) lib/action_controller/metal/rendering.rb:10:in `process_action'
  actionpack (4.2.0) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
  activesupport (4.2.0) lib/active_support/callbacks.rb:117:in `call'
  activesupport (4.2.0) lib/active_support/callbacks.rb:151:in `block in halting_and_conditional'
  activesupport (4.2.0) lib/active_support/callbacks.rb:151:in `block in halting_and_conditional'
  activesupport (4.2.0) lib/active_support/callbacks.rb:151:in `block in halting_and_conditional'
  activesupport (4.2.0) lib/active_support/callbacks.rb:169:in `block in halting'
  activesupport (4.2.0) lib/active_support/callbacks.rb:234:in `block in halting'
  activesupport (4.2.0) lib/active_support/callbacks.rb:169:in `block in halting'
  activesupport (4.2.0) lib/active_support/callbacks.rb:169:in `block in halting'
  activesupport (4.2.0) lib/active_support/callbacks.rb:234:in `block in halting'
  activesupport (4.2.0) lib/active_support/callbacks.rb:169:in `block in halting'
  activesupport (4.2.0) lib/active_support/callbacks.rb:234:in `block in halting'
  activesupport (4.2.0) lib/active_support/callbacks.rb:92:in `_run_callbacks'
  activesupport (4.2.0) lib/active_support/callbacks.rb:734:in `_run_process_action_callbacks'
  activesupport (4.2.0) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (4.2.0) lib/abstract_controller/callbacks.rb:19:in `process_action'
  actionpack (4.2.0) lib/action_controller/metal/rescue.rb:29:in `process_action'
  actionpack (4.2.0) lib/action_controller/metal/instrumentation.rb:31:in `block in process_action'
  activesupport (4.2.0) lib/active_support/notifications.rb:164:in `block in instrument'
  activesupport (4.2.0) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
  activesupport (4.2.0) lib/active_support/notifications.rb:164:in `instrument'
  actionpack (4.2.0) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
  actionpack (4.2.0) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
  activerecord (4.2.0) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
  actionpack (4.2.0) lib/abstract_controller/base.rb:137:in `process'
  actionview (4.2.0) lib/action_view/rendering.rb:30:in `process'
  actionpack (4.2.0) lib/action_controller/metal.rb:195:in `dispatch'
  actionpack (4.2.0) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
  actionpack (4.2.0) lib/action_controller/metal.rb:236:in `block in action'
  actionpack (4.2.0) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
  actionpack (4.2.0) lib/action_dispatch/routing/route_set.rb:42:in `serve'
  actionpack (4.2.0) lib/action_dispatch/journey/router.rb:43:in `block in serve'
  actionpack (4.2.0) lib/action_dispatch/journey/router.rb:30:in `serve'
  actionpack (4.2.0) lib/action_dispatch/routing/route_set.rb:802:in `call'
  warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
  warden (1.2.3) lib/warden/manager.rb:34:in `call'
  rack (1.6.0) lib/rack/etag.rb:24:in `call'
  rack (1.6.0) lib/rack/conditionalget.rb:25:in `call'
  rack (1.6.0) lib/rack/head.rb:13:in `call'
  actionpack (4.2.0) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
  actionpack (4.2.0) lib/action_dispatch/middleware/flash.rb:260:in `call'
  rack (1.6.0) lib/rack/session/abstract/id.rb:225:in `context'
  rack (1.6.0) lib/rack/session/abstract/id.rb:220:in `call'
  actionpack (4.2.0) lib/action_dispatch/middleware/cookies.rb:560:in `call'
  activerecord (4.2.0) lib/active_record/query_cache.rb:36:in `call'
  activerecord (4.2.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:647:in `call'
  activerecord (4.2.0) lib/active_record/migration.rb:378:in `call'
  actionpack (4.2.0) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
  activesupport (4.2.0) lib/active_support/callbacks.rb:88:in `_run_callbacks'
  activesupport (4.2.0) lib/active_support/callbacks.rb:734:in `_run_call_callbacks'
  activesupport (4.2.0) lib/active_support/callbacks.rb:81:in `run_callbacks'
  actionpack (4.2.0) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
  actionpack (4.2.0) lib/action_dispatch/middleware/reloader.rb:73:in `call'
  actionpack (4.2.0) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
  better_errors (2.1.0) lib/better_errors/middleware.rb:84:in `protected_app_call'
  better_errors (2.1.0) lib/better_errors/middleware.rb:79:in `better_errors_call'
  better_errors (2.1.0) lib/better_errors/middleware.rb:57:in `call'
  web-console (2.0.0) lib/action_dispatch/debug_exceptions.rb:18:in `middleware_call'
  web-console (2.0.0) lib/action_dispatch/debug_exceptions.rb:13:in `call'
  actionpack (4.2.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
  railties (4.2.0) lib/rails/rack/logger.rb:38:in `call_app'
  railties (4.2.0) lib/rails/rack/logger.rb:20:in `block in call'
  activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in `block in tagged'
  activesupport (4.2.0) lib/active_support/tagged_logging.rb:26:in `tagged'
  activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in `tagged'
  railties (4.2.0) lib/rails/rack/logger.rb:20:in `call'
  quiet_assets (1.1.0) lib/quiet_assets.rb:27:in `call_with_quiet_assets'
  actionpack (4.2.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'
  rack (1.6.0) lib/rack/methodoverride.rb:22:in `call'
  rack (1.6.0) lib/rack/runtime.rb:18:in `call'
  activesupport (4.2.0) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
  rack (1.6.0) lib/rack/lock.rb:17:in `call'
  actionpack (4.2.0) lib/action_dispatch/middleware/static.rb:113:in `call'
  rack (1.6.0) lib/rack/sendfile.rb:113:in `call'
  railties (4.2.0) lib/rails/engine.rb:518:in `call'
  railties (4.2.0) lib/rails/application.rb:164:in `call'
  rack (1.6.0) lib/rack/lock.rb:17:in `call'
  rack (1.6.0) lib/rack/content_length.rb:15:in `call'
  rack (1.6.0) lib/rack/handler/webrick.rb:89:in `service'
   () Users/nnikolo/.rbenv/versions/2.2.0/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
   () Users/nnikolo/.rbenv/versions/2.2.0/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
   () Users/nnikolo/.rbenv/versions/2.2.0/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'

Can you, please, advise?

nikolay12 avatar Jun 18 '15 11:06 nikolay12

You are missing Koudoku::ApplicationHelper methods. You can include them like this :

# app/helpers/application_helper
module ApplicationHelper
  include Koudoku::ApplicationHelper
end

Now, why these aren't included by default is another issue.

jdurand avatar Jul 13 '15 16:07 jdurand

@jdurand Editing to expand a bit more: I think that this should already be in place: https://github.com/andrewculver/koudoku/blob/master/lib/koudoku/engine.rb#L13

In my applications I always use plan.price - which made me never see that error. I suspect that something else is going on here.

yas4891 avatar Jul 13 '15 17:07 yas4891

@yas4891 I get that this should work, but in my case I have to include these helper methods..

jdurand avatar Jul 13 '15 17:07 jdurand

@jdurand Very strange indeed. It works perfectly fine here. Which version of Rails are you using?

yas4891 avatar Jul 13 '15 17:07 yas4891

I'm using rails 4.2.0. I was able to get this to work the way spree includes its helpers :

Koudoku::ApplicationController.class_eval do
  layout 'account'
  helper 'koudoku/application'
end

Is there a added benefit with loading them in an engine initializer?

jdurand avatar Jul 13 '15 17:07 jdurand

@jdurand From my understanding the code currently used in Koudoku loads the helper into ::ApplicationController instead of Koudoku::ApplicationController

yas4891 avatar Jul 13 '15 17:07 yas4891

Are these helper methods needed outside of the context of Koudoku::ApplicationController?

jdurand avatar Jul 13 '15 17:07 jdurand

I encountered the same issue as @nikolay12 in development, but not in production. My fix was to change development.rb to have config.eager_load = true. I'm not sure I totally understand why, but maybe that sheds some light on the problem?

TildeWill avatar Jan 15 '16 18:01 TildeWill

Sorry, late to the party. This is to do with code reloading in development. I've seen similar in Engines related to RefineryCMS. restart your rails server and it should be fine (until the next reload). Using class_eval rather than the on_load hook seems to work, as reported by @jdurand.

cowlibob avatar Feb 13 '16 22:02 cowlibob

Hey, I also experienced this same issue doing a new integration of Koudoku into a project. @jdurand's solution worked for me, but there is no mention of this in the README. Who wrote that thing? ;-)

andrewculver avatar Mar 23 '17 20:03 andrewculver