2013-04-10 100 views
0

我無法在我寫的渲染器類上調用任何方法。其方法是否應該暴露?未定義的方法錯誤,但方法在Ruby中定義...爲什麼?

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

如果你的意思是一個類的方法,然後

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 
+0

Duhh,當然!我正在調用類初始化的實例方法!傻我! – Mohamad 2013-04-10 14:04:48

+0

xdazz,你能解釋一下使用'class << self'的好處嗎?是否我們可以將我們所有的班級方法分組在一起,並將它們放在一個地方? – Zippie 2013-04-10 14:07:14

+1

@Mohamad,你有'articlesRenderer'類嗎? – ted 2013-04-10 14:11:38

相關問題