2010-02-23 54 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