在rails 3中的视图中使用辅助方法

时间:2010-11-24 13:37:26

标签: ruby-on-rails-3

有些东西让我对轨道3感到不安。 我正在尝试将我的应用程序从rails 2升级到rails 3。

我遵循了所有必要的步骤,除了一件事之外,事情对我来说还不错:

我有一个辅助方法,在不同的帮助器中定义不同,例如,它在application_helper中以一种方式定义,并且在homepage_helper中以不同的方式定义,并在另一个帮助器中以不同的方式定义,比如说video_helper除此之外,它在整个应用程序中使用的共享视图中使用,现在如果我在主页中,我希望从homepage_helper调用此函数,如果我在视频页面中,该函数必须从video_helper调用,基于rails中约定的概念,这在rails 2中完美地工作但在rails 3中,该函数总是从最后一个帮助器调用,按字母顺序排序,在示例中为video_helper。

我该如何解决这个问题? 请建议。

感谢所有帮助。

2 个答案:

答案 0 :(得分:2)

在rails 3中,所有助手总是被加载。

你可以:

1)以不同的方式为你的助手命名。

2)明确定义你想要的帮助

3)从助手那里检查控制器,以确定要提供哪个助手。

答案 1 :(得分:1)

如果我理解你的帖子,你就有类似

的东西
module ApplicationHelper
  def error_messages
    ...
  end
end

module VideoHelper
  def error_messages
    ...
  end
end

module HomepageHelper
  def error_messages
    ...
  end
end

现在你想从一个特定的助手调用error_messages并且任意调用error_messages的行为与它在Rails 2中的行为不同。到目前为止我是对的吗?如果没有,你可以忽略这篇文章的其余部分= P

我只花了半个小时玩语法,我在irb中的一个项目和我能得到的最接近的东西就像Posts :: PostsHelper.helper_method一样,如果我'首先包含PostsHelper'那就在irb中工作

话虽如此,如果你愿意做类似Class :: ClassHelper.helper_method的事情,为什么不重命名“helper_method”以使它对你的ClassHelper来说是独一无二的?无论如何,您将不得不将每个“helper_method”调用更改为特定于某个帮助程序。我认为这是一个更清洁的解决方案