有些东西让我对轨道3感到不安。 我正在尝试将我的应用程序从rails 2升级到rails 3。
我遵循了所有必要的步骤,除了一件事之外,事情对我来说还不错:
我有一个辅助方法,在不同的帮助器中定义不同,例如,它在application_helper中以一种方式定义,并且在homepage_helper中以不同的方式定义,并在另一个帮助器中以不同的方式定义,比如说video_helper除此之外,它在整个应用程序中使用的共享视图中使用,现在如果我在主页中,我希望从homepage_helper调用此函数,如果我在视频页面中,该函数必须从video_helper调用,基于rails中约定的概念,这在rails 2中完美地工作但在rails 3中,该函数总是从最后一个帮助器调用,按字母顺序排序,在示例中为video_helper。
我该如何解决这个问题? 请建议。
感谢所有帮助。
答案 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”调用更改为特定于某个帮助程序。我认为这是一个更清洁的解决方案