【问题标题】:I am confused about the rails scope我对 rails 范围感到困惑
【发布时间】:2014-07-08 03:55:13
【问题描述】:

我对 rails Helper 范围感到困惑。

我在PagesHelper中定义了一个testpage方法

module PagesHelper
  def testpage
    "testpagehelper"
  end
end

但是为什么我可以在views/users/index.html.erb中使用testpage方法

<h1><%= testpage %> </h1>

我想testpage只用在views/pages/index.html.erb中?

我认为辅助方法的范围太广了。

如果我在 UsersHelper 中定义了相同的方法,就会出现问题。

module UsersHelper
  def testpage
    "testuserhelper"
  end
end

helper中有两个testpage,结果是view/pages/index.html和view/users/index.html都使用UsersHelper中的“testpage”?为什么?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    新的 Rails 应用程序在 ApplicationController 中使用helper :all——这意味着所有帮助程序都加载到从 ApplicationController 继承的所有控制器中。我同意这个范围太广了。所以你应该把它改成helper :application,然后让每个控制器只拉入它自己的助手。请注意,每个控制器都会自动拉入与其同名的助手,因此您不必在 UsersController 中包含 helper :user

    【讨论】:

    • 抱歉,我的问题是辅助范围是所有视图,甚至是不相关的视图。
    • 我明白了,这也是我上面提到的问题。控制器负责拉入助手,然后将其提供给该请求的视图。因此,如果您不为每个请求加载所有帮助器,那么您将不会在每个视图中获得所有可用的帮助器方法。我发现这篇 SO 帖子说了同样的话:stackoverflow.com/questions/1179865/… - 但显然这是 Rails >= 3.1 中的一个设置。
    • 非常感谢!我认为 DHH 认为如果 helper 对所有视图都可用会更方便,实际上与 helper 的 DRY 相比,该方法的碰撞问题不大。
    【解决方案2】:

    不同的帮助模块只是为了帮助组织你的方法。您可以在不相关的视图中使用PageHelper,但您应该这样做吗?由程序员决定。

    【讨论】:

    • 但是如果两个不同的helper中有两个同名的方法会是一个问题?视图可以看到哪个?
    • 方法名可能冲突
    猜你喜欢
    • 2017-09-20
    • 1970-01-01
    • 2011-07-17
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多