Reputation: 35359
I am unable to call any methods on a renderer class I wrote. Should its methods not be exposed?
class EntriesController < ApplicationController
def show
BaseRenderer.renderer_for(@entry) # @entry is loaded with a before_filter
end
end
# app/renderers/base_renderer.rb
class BaseRenderer
def renderer_for(entry)
klass ||= "#{entry.entry_type}Renderer".constantize
klass.new(entry)
end
end
I get NoMethodError at ... undefined method 'renderer_for' for BaseRenderer:Class
But the method is clearly defined. What gives?
Upvotes: 1
Views: 2848
Reputation: 160933
If you mean a class method, then
def renderer_for(entry)
should be
def self.renderer_for(entry)
Or
class BaseRenderer
class << self
def renderer_for(entry)
# could also change to this
Object.const_get("#{entry.entry_type}Renderer").new(entry)
end
end
end
Upvotes: 6