2012-10-04 35 views
0

是否可以通過我的lib文件夾中的方法訪問在controller中定義的instance variable?考慮在我的lib文件夾中的類DoSomething在rails的lib文件夾中訪問實例變量

# inside /lib folder 
class DoSomething 

    def fun 
     puts @some_text 
    end 

end 


class SampleController < ApplicationController 

    def index 
    @some_text = "ha ha ha" 
    DoSomething.new().fun 
    end 

end 

這不會打印任何東西。我可以將價值傳遞給方法,但我想知道是否有可能沒有這樣做呢?

+0

哦,不,這是沒有意義的。你想做什麼?你真的想要某種形式的mixin嗎? –

+0

@DaveNewton我擁有處理大量實例變量的功能,並在多個控制器中使用,因此我想將公共代碼移動到lib文件中,以便可以跨控制器訪問。 – Rahul

+0

然後,你想要一些混合,而不是一個完全孤立的類。或者您可以將實例傳遞給庫類,並像處理其他類一樣操作可見實例變量。 –

回答

2

您無法直接訪問它,但你可以將它傳遞給初始化爲DoSomething的:

# inside /lib folder 
class DoSomething 

    def initialize(some_text) 
    @some_text = some_text 
    end 

    def fun 
    puts @some_text 
    end 
end 


class SampleController < ApplicationController 

    def index 
    @some_text = "ha ha ha" 
    DoSomething.new(@some_text).fun 
    end 
end