无法访问rails helper中的控制器实例变量?

时间:2017-08-14 05:01:12

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试使用帮助在我的控制器中访问辅助方法,如下所示:

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

Inside Helper方法,我试图访问控制器的实例变量

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

但是在上面的场景中,@ foo是零。当我从视图中调用相同的方法时,@ foo可用。那么实例变量只能通过UI传递给辅助方法,还是有其他方式?

提前致谢。

更新

view_context 

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

2 个答案:

答案 0 :(得分: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

将其作为参数传递。

答案 1 :(得分:0)

您可以访问在助手中的控制器中设置的实例变量。如果值为nil,那么您需要在帮助程序中处理它:

module SomeHelper
  def do_something
    return 0 if !@value
    value * 3
  end
end

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

  def show
    @value = nil
    helpers.do_something
  end

end