如何通过任意 erb 文件访问任意视图助手的方法?

Posted

技术标签:

【中文标题】如何通过任意 erb 文件访问任意视图助手的方法?【英文标题】:How to access methods of an arbitrary view helper by an arbitrary erb file? 【发布时间】:2011-07-09 14:35:42 【问题描述】:

按照惯例,Rails 仅“附加”与调用 erb 文件的控制器相对应的视图助手。

如何在 Rails 中访问任意视图助手的视图助手方法?

【问题讨论】:

【参考方案1】:

如果您需要这样做,则说明您的代码组织有问题。相反,将您的两个视图都需要的辅助方法移动到一个公共模块中,并将该模块包含在两者中。

例如,如果您有:

module ApplesHelper
  def flavor_of(fruit)
  end
end

并且您希望 /bananas 视图可以访问 flavor_of 方法,然后执行以下操作:

module Flavored
  def flavor_of(fruit)
    # ...
  end
end

module ApplesHelper
  include Flavored
end

module BananasHelper
  include Flavored
end

更新:我意识到我实际上并没有直接回答最初的问题。在视图中包含另一个助手的方法是使用helper

class BananasController ...
  helper ApplesHelper
end

现在所有 /bananas 视图也都有 ApplesHelper 方法可供它们使用。

【讨论】:

重构代码是个好点子,解决问题... +1 已更新以实际回答问题,但我仍然建议重构。【参考方案2】:

如果我很好地理解了这个问题,你必须定义你的方法助手:

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 %>

请记住,&lt;% %&gt; 包含的代码仅由 ruby​​ 解释,视图不显示。在这种情况下,您必须使用 &lt;%= %&gt; 包含的代码。

现在您可以访问value_you_want 并可能使用 for 语句。

【讨论】:

是的,这是 Rails 的默认行为。给定您的示例,/views/Controller 中的视图只能访问定义 ControllerHelper 的方法。我想从 /views/Controller 中的视图调用 OtherControllerHelper 的方法... @Scholle 抱歉,我忘记将包含插入到另一个控制器中。现在我意识到我没有正确回答!

以上是关于如何通过任意 erb 文件访问任意视图助手的方法?的主要内容,如果未能解决你的问题,请参考以下文章

通过配置host文件实现本地域名任意设置

SwiftUI 中如何获取任意视图触摸位置(全局或局部)的坐标

SwiftUI 中如何获取任意视图触摸位置(全局或局部)的坐标

SwiftUI 中如何获取任意视图触摸位置(全局或局部)的坐标

从视图控制器中的任意点调用 Segue 方法

HTML助手函数创建具有任意多个属性(self-closing和container)的任意元素