我认为这是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的一个重要区别。
答案 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