2014-02-12 30 views
0

未定義的方法我在app/misc/dsl/builder.rb具有此代碼有一個模塊Rails的4:模塊

module Dsl 
    class Builder 
    def initialize(context, &block) 
     return if not block_given? 

     parent_context = block.binding.eval "self" 
     parent_context.extend Proxy 
     parent_context.object = context 

     parent_context.instance_eval &block 
    end 
    end 

    def self.set_context(context, &block) 
    Dsl::Builder.new(context, &block) 
    end 
end 

注:此目錄miscapplication.rb

config.autoload_paths += Dir[Rails.root.join('app', 'models', '{**/}'), 
    Rails.root.join('app', 'misc', '{**/}') 
] 

預裝然後,在文本某處(可以說在foo.rb)我有這個代碼:

Dsl.set_context(obj) do 
    #some code with obj receiving messages 
end 

我們使用的測試堆棧包含Zeus + Guard + Rspec。現在,可以說我的代碼重寫的東西不能正常工作

Dsl.set_context(obj) do 
    asdqwe #this message does not exists 
end 

從時間到時間,我收到這個莫名其妙的消息

1) SomeOtherClass search_hash receiving keywords params should query for those keywords 
    Failure/Error: subject.search_hash 
    NoMethodError: 
     undefined method `set_context' for Dsl:Module 
    # ./app/misc/product_query.rb:116:in `base_search_hash' 
    # ./app/misc/product_query.rb:25:in `search_hash' 
    # ./spec/misc/product_query_spec.rb:78:in `block (4 levels) in <top (required)>' 
    # -e:1:in `<main>' 

而不是正確的消息應當關於undefined method asdqwe

有關這個的任何線索?

+0

你重新啓動服務器?鋤頭是你在application.rb中預加載的嗎?看起來好像不是負載。你可以試試'requrie'app/misc/dsl/builder.rb''嗎? – lalo

+0

@lalo剛剛更新了這個問題。我嘗試了'require_relative'app/misc/dsl/builder.rb',然後是,它加載。這似乎是一個加載問題,但無法弄清楚會發生什麼。 – geekazoid

回答

1

查找here

它說:

導軌3已被更新,使得類/模塊(以下,C/M) 是延遲裝入從自動加載路徑在需要時

所以,你可以在你的rspec_helper.rb中做require_relative 'app/misc/dsl/builder.rb'(可以用require更好嗎?)問題一定是加載器事先不知道w這裏找到Dsl.set_context,但他知道,一旦你引用Dsl::Builder

希望它可以幫助