2013-03-09 81 views
2

如果我定期运行这个简单的Ruby代码,它工作正常:为什么这个简单的Ruby代码不能在HAML中工作?

class String 
    def add_two 
    self + "2" 
    end 
end 
puts "hello".add_two 

它打印“hello2”,因为它应该。但这种失败:

:ruby 
    class String 
    def add_two 
     self + "2" 
    end 
    end 
    puts "hello".add_two 

此代码产生一个错误:

NoMethodError at/
undefined method `add_two' for "hello":String 

任何想法有什么不对?

(不知道它的问题,但我使用HAML与西纳特拉,这是在Apache上运行与乘客模块。)

+0

你可以尝试添加'提出“内容类型:text/html的\ n \ n”?''之前看跌期权“你好” .add_two”' – 2013-03-09 11:25:23

+0

您是否按照MVC架构为什么你想做的事那个? – 2013-03-09 11:25:27

+2

我觉得你真的不应该是猴子修补字符串在视图 – AJcodez 2013-03-09 11:58:24

回答

2

我建议字符串是在另一个命名空间,为此另一个类。

发生了什么?

class ::String 
+0

这对我来说伎俩! – user2015453 2013-03-09 14:05:31

+0

仅供参考,这在Rails视图中不起作用,但是由于它在Sinatra中可用,并且解决了以下问题,因此需要关心:+1。 – 2013-03-09 14:16:33

1

我把你的代码是成在Rails我Haml的景色之一应用程序,我得到了一个不同的错误给您:

SyntaxError at/
class definition in method body 

所以我不知道它是否是Haml's :ruby filter是抱怨,但因为它“解析与正常的Ruby解释器的过滤文本”,这似乎不太可能。所以,我搜索了有关该错误的详细信息,发现引用(见下文),导致我到这一点,这工作(但是,真的,不应该使用):

:ruby 
    String.module_eval do 
    def add_two 
     self + "2" 
    end 
    end 
    puts "hello".add_two 

参考文献:

相关问题