Ruby on rails 如何通过任意erb文件访问任意视图辅助对象的方法?
按照惯例,Rails只“附加”与erb文件所调用的控制器相对应的视图辅助对象Ruby on rails 如何通过任意erb文件访问任意视图辅助对象的方法?,ruby-on-rails,ruby-on-rails-3,view,helper,Ruby On Rails,Ruby On Rails 3,View,Helper,按照惯例,Rails只“附加”与erb文件所调用的控制器相对应的视图辅助对象 如何访问Rails中任意视图帮助程序的视图帮助程序方法?如果需要这样做,代码的组织有问题。相反,将两个视图都需要的帮助器方法移动到一个公共模块中,并将该模块包含在这两个模块中 例如,如果您有: module ApplesHelper def flavor_of(fruit) end end 您希望/bananas视图能够访问方法的flavor\u,然后执行以下操作: module Flavored def
如何访问Rails中任意视图帮助程序的视图帮助程序方法?如果需要这样做,代码的组织有问题。相反,将两个视图都需要的帮助器方法移动到一个公共模块中,并将该模块包含在这两个模块中 例如,如果您有:
module ApplesHelper
def flavor_of(fruit)
end
end
您希望/bananas视图能够访问方法的flavor\u,然后执行以下操作:
module Flavored
def flavor_of(fruit)
# ...
end
end
module ApplesHelper
include Flavored
end
module BananasHelper
include Flavored
end
更新:我意识到我并没有直接回答原来的问题。在视图中包含另一个辅助对象的方法是使用helper
:
class BananasController ...
helper ApplesHelper
end
现在,all/bananas视图也提供了ApplesHelper方法。如果我很好地理解了这个问题,您必须使用以下方法定义方法帮助器:
module ControllerHelper
def function_you_have_to_call
some_code_here
end
end
当您想通过*.erb文件调用方法助手时,必须在视图中插入:
<% function_you_have_to_call %>
如果方法具有返回值,并且希望将其存储在视图中定义的局部变量中,请尝试:
<% value_you_want = function_you_have_to_call %>
请记住,
中包含的代码仅由ruby解释,而不是视图显示。在这种情况下,您必须使用
中包含的代码
现在,您可以访问所需的value\u
,并可能用于语句 是的,这是Rails的默认行为。根据您的示例,/views/Controller中的视图只能访问ControllerHelper定义的方法。我想从/views/Controller…@Scholle中的视图调用OtherControllerHelper的方法抱歉,我忘了在另一个控制器中插入include。现在我意识到我没有答对!重构代码是一个很好的方法,可以解决问题+1尽管我仍然建议重构,但这是实际回答这个问题的更新。