2010-02-23 57 views
0

我认为这是一个Ruby差异,但我使用相同的Ruby版本1.8.7。这与this post有关(回答“你为什么需要这个?”)。这个代码在2.2.2Rails 2.2和2.3.5之间的区别? ActionMailer.Utils

Loading development environment (Rails 2.2.2) 
>> module ActionMailer 
>> Utils.normalize_new_lines("blah") 
>> end 

但在2.3.5失败

Loading development environment (Rails 2.3.5) 
>> module ActionMailer 
>> Utils.normalize_new_lines("blah") 
>> end 
NoMethodError: undefined method `normalize_new_lines' for ActionMailer::Utils:Module 
from (irb):2 

最新消息关于2.3.5,这会失败?方法是在2.3.5,所以这个作品

Loading development environment (Rails 2.3.5) 
>> include ActionMailer 
>> include Utils 
>> normalize_new_lines("blah") 

我知道这可能是一个重要的Rails差异。

回答

3

貌似从version 2.2改为version 2.3.5

旧代码:

module ActionMailer 
    module Utils #:nodoc: 
    def normalize_new_lines(text) 
     text.to_s.gsub(/\r\n?/, "\n") 
    end 
    module_function :normalize_new_lines 
    end 
end 

新:

module ActionMailer 
    module Utils #:nodoc: 
    def normalize_new_lines(text) 
     text.to_s.gsub(/\r\n?/, "\n") 
    end 
    end 
end 

我想你可以通过调用module_function自己恢复原来的行为:

$ script/console 
Loading development environment (Rails 2.3.5) 
>> module ActionMailer 
>> module Utils 
>> module_function :normalize_new_lines 
>> end 
>> Utils.normalize_new_lines("blah") 
>> end 
=> "blah" 
>> 

编辑:或者更好的只是包括模块(每Simone

>> include ActionMailer::Utils

+0

此外,我会建议包括模块,而不是恢复旧的行为。如果它发生变化,这是有原因的。恕我直言,实施应遵循图书馆,而不是恢复图书馆遵循我们的实施。否则,未来可能会出现其他问题。 – 2010-02-23 17:49:41

+0

@Simone Carletti,自从我使用“补丁”ActionMailer的插件以来,我在该补丁中添加了“include Utils”。有用。这是一个坏主意吗? @Zetetic谢谢你跟踪这个。我将来更有可能自己阅读源代码。 – 2010-02-23 18:31:11

+0

@yar只要确保你没有包含模块两次。 – 2010-02-23 19:49:31

相关问题