Mohamad
Mohamad

Reputation: 35359

Undefined method error but method is defined in Ruby... why?

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

Answers (1)

xdazz
xdazz

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

Related Questions