对于rails控制器中的受保护方法,通过使用helper_method声明它们,可以使它们可用于其视图。默认情况下,rails helper to views中的方法在所有视图中共享(可访问)。我的问题是,控制器方法是否也通过所有视图共享(可访问)helper_method来声明?
由于
答案 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
您可以看到,在调用时,帮助程序只是在控制器上调用同名的方法。