在helper_method之后的控制器中的方法是否可用于rails中的所有视图

时间:2011-12-15 15:31:31

标签: ruby-on-rails view ruby-on-rails-3.1

对于rails控制器中的受保护方法,通过使用helper_method声明它们,可以使它们可用于其视图。默认情况下,rails helper to views中的方法在所有视图中共享(可访问)。我的问题是,控制器方法是否也通过所有视图共享(可访问)helper_method来声明?

由于

1 个答案:

答案 0 :(得分:2)

如果使用helper_method将控制器方法声明为帮助程序,则辅助程序仅在属于控制器的视图中可用。

如果要在所有视图中提供帮助程序,则必须在Application控制器中定义控制器方法并声明帮助程序。

如果您有兴趣,这是相关的Rails代码:

def helper_method(*meths)
  meths.flatten!
  self._helper_methods += meths

  meths.each do |meth|
    _helpers.class_eval <<-ruby_eval, __FILE__, __LINE__ + 1
      def #{meth}(*args, &blk)
        controller.send(%(#{meth}), *args, &blk)
      end
    ruby_eval
  end
end

您可以看到,在调用时,帮助程序只是在控制器上调用同名的方法。