2017-08-14 146 views
1

我試圖訪問的輔助方法使用助手像我下面的控制器:無法在rails helper中訪問控制器實例變量?

class MyController < ApplicationController 
    def index 
     @foo = 'bar' 
     helpers.my_helper_method 
    end 
    end 

內部助手方法,我試圖訪問控制器

module MyHelper 
    def my_helper_method 
    #some manipulation on foo 
    @foo.to_i 
    end 
end 

但是,在上述的實例變量場景@foo是零。當我從視圖調用相同的方法時,@foo可用。所以實例變量只能通過UI或其他方式傳遞給helper方法嗎?

在此先感謝。

UPDATE:

view_context 

似乎是合理的解決方案https://apidock.com/rails/AbstractController/Rendering/view_context

回答

1
class MyController < ApplicationController 
    def index 
     @foo = 'bar' 
     helpers.my_helper_method(@foo) 
    end 
    end 

module MyHelper 
    def my_helper_method(foo) 
    #some manipulation on foo 
    foo.to_i 
    end 
end 

把它作爲參數。

+0

這是一個示例代碼,但實際的代碼將是複雜的,需要作爲實例變量進行訪問。你可以確認我不能訪問實例變量,如果我這樣調用助手方法。 – Praveenkumar

0

您可以訪問您在助手中的控制器中設置的實例變量。如果該值爲nil,那麼你需要在你的幫助來對付它:

module SomeHelper 
    def do_something 
    return 0 if [email protected] 
    value * 3 
    end 
end 

class SomeController 
    def index 
    @value = 1 
    helpers.do_something 
    end 

    def show 
    @value = nil 
    helpers.do_something 
    end 

end