2010-02-23 9 views
0

Je pense que c'est une différence Ruby, mais j'utilise la même version 1.8.7 de Ruby. Ceci est lié à this post (pour répondre "pourquoi avez-vous besoin de cela?"). Ce code fonctionne dans 2.2.2Différence entre Rails 2.2 et 2.3.5? ActionMailer.Utils

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

mais en 2.3.5 il ne

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 

Quoi de neuf à propos 2.3.5 que ce serait un échec? La méthode est là en 2.3.5, donc cela fonctionne

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

Je sais que cela est probablement une importante différence Rails.

Répondre

3

On dirait que le code modifié de version 2.2 à version 2.3.5

ancienne:

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 

nouvelle:

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

Je suppose que vous pouvez restaurer l'ancien comportement en appelant module_function vous:

$ 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" 
>> 

EDIT: Ou mieux encore simplement le nom du module (par Simone)

>> include ActionMailer::Utils

+0

Aussi, je suggère d'inclure le module au lieu de rétablir l'ancien comportement. Si cela change, il y a une raison à cela. À mon humble avis, la mise en œuvre devrait suivre la bibliothèque, au lieu de revenir à la bibliothèque pour suivre notre mise en œuvre. Sinon, d'autres problèmes pourraient survenir à l'avenir. –

+0

@Simone Carletti, depuis le plugin J'utilise "patchs" ActionMailer, j'ai ajouté "include Utils" à ce patch. Ça marche. Est-ce une mauvaise idée? @Zetetic merci de suivre cela. Je serai plus susceptible de lire la source moi-même à l'avenir. –

+0

@yar assurez-vous de ne pas inclure le module deux fois. –

Questions connexes