2010-07-20 4 views
0

Je rencontre une erreur lorsque j'essaie de scinder la classe dm-observateur dans un fichier séparé de ma classe de modèle. Auparavant, cela fonctionnait bien si je mettais tout dans un seul fichier.Comment séparer une classe d'observateur de datamappers dans un fichier différent de la classe de modèle?

# test_observer.rb 
require 'dm-observer' 

class TestObserver 
    include DataMapper::Observer 
    observe Test 

    before :create do 
     # does funky stuff 
    end 
end 

# test.rb 
require 'dm-core' 
require File.dirname(__FILE__) + '/test_observer' 

class Test 
    include DataMapper::Resource 

    property :id, Serial 
    property :name, String 
    property :state, Integer 
end 

Chaque fois que je requiers la classe de test, je cours dans l'erreur:

uninitialized constant TestObserver::Test (NameError) 

Je ne sais pas pourquoi le TestObserver :: est préfixé au nom de la classe. J'ai le sentiment que je ne mets pas les exigences au bon endroit, mais j'ai tout essayé et ça ne fonctionnera toujours pas bien. J'apprécierais toute aide à ce sujet.

Merci!

Répondre

1

Vous avez besoin de test.rb qui nécessite test_observer avant que La classe de test est déclarée. Vous devez supprimer cette ligne:

require File.dirname(__FILE__) + '/test_observer'

et nécessitent des fichiers dans cet ordre:

require 'test'

require 'test_observer'

+0

Merci encore solnic! Cela a bien fonctionné. Est-ce qu'il y a un moyen pour que test_observer soit utilisé dans test.rb afin que je n'ai pas à m'inquiéter d'avoir besoin de la classe d'observateur chaque fois que j'utilise la classe Test? – zaizhuang

Questions connexes