Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何通过任意erb文件访问任意视图辅助对象的方法?_Ruby On Rails_Ruby On Rails 3_View_Helper - Fatal编程技术网

Ruby on 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只“附加”与erb文件所调用的控制器相对应的视图辅助对象


如何访问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尽管我仍然建议重构,但这是实际回答这个问题的更新。