1

私が書いたレンダラー クラスのメソッドを呼び出すことができません。そのメソッドは公開されるべきではありませんか?

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

私は得るNoMethodError at ... undefined method 'renderer_for' for BaseRenderer:Class

しかし、方法は明確に定義されています。何を与える?

4

1 に答える 1

6

クラスメソッドを意味する場合は、

def renderer_for(entry)

する必要があります

def self.renderer_for(entry)

または

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
于 2013-04-10T14:03:36.283 に答える