Rails 2.2和2.3.5之间的区别? ActionMailer.Utils

时间:2010-02-23 16:47:28

标签: ruby-on-rails

我认为这是Ruby的区别,但我使用的是相同的Ruby版本1.8.7。这与this post有关(回答“你为什么需要这个?”)。此代码适用于2.2.2

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的一个重要区别。

1 个答案:

答案 0 :(得分: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