在rails 3上调用方法查看帮助程序问题

时间:2010-10-30 11:06:01

标签: ruby-on-rails helper

我有两个视图助手

module Admin::CategoriesHelper
    def test
       return "a"
    end


module CategoriesHelper
    def test
       return "b"
    end

我在views / admin / categories / index.html.erb

中调用测试方法

=============================================== =====================

如果我使用Admin :: CategoriesHelper.test,它会抛出像风箱一样的错误:

NoMethodError in Admin/categories#index
Showing /home/mlzboy/my/b2c2/app/views/admin/categories/index.html.erb where line #32 raised:

undefined method `my_new_admin_category_path' for Admin::CategoriesHelper:Module
Extracted source (around line #32):

29: 
30: <br />
31: 
32: <%= link_to 'New Category', Admin::CategoriesHelper.my_new_admin_category_path(@parent) %>

它返回b而不是a

如果我更改方法名称,如test2与CategoriesHelper不一样 它工作正常

所以如何解决这个问题,我在rails中的newibe,我想知道为什么会发生这种情况,谢谢

我的routes.rb有什么问题吗?我的routes.rb文件是风箱

 namespace :admin do
    resources :categories
 end
 resources :categories  

1 个答案:

答案 0 :(得分:0)

您的Admin::CategoriesHelperCategoriesHelper都已加载并显示在您的视图中。这意味着将执行最后加载的模块。

为了说明我的观点,您的视图加载了这样的帮助:

class MyView
  include Helper1
  include Helper2
end

Helper1Helper2都包含方法test。在这种情况下,当您运行MyView#test时,它将执行Helper2#testHelper1#test已被覆盖,无法访问。

因为ActionView(或负责加载帮助程序的任何东西)以任意顺序加载帮助程序,所以你遇到了麻烦。

我的解决方案是在命名空间模块中添加前缀:

module CategoriesHelper
  def test
  end
end

module Admin::CategoriesHelper
  def admin_test
  end
end