2010-10-30 244 views
0

我有两个视图助手invoke方法

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


module CategoriesHelper 
    def test 
     return "b" 
    end 

我援引视图/管理/类别/ index.html.erb

测试方法======== ================================================== ==========

,如果我使用管理:: 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

如果我改变了方法名称,如测试2没有与CategoriesHelper 同它的做工精细

那么如何解决这个问题,我在轨newibe,我想知道为什么发生这种情况,感谢

是有什么错我的routes.rb?,我的routes.rb文件是波纹管

namespace :admin do 
    resources :categories 
end 
resources :categories 

回答

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 
+0

我已经改名为admin_test,它可以通过调用admin_test,为什么不能由Admin :: CategoriesHelper.admin_test? – mlzboy 2010-10-30 12:11:15

+0

我还有另一个相关的问题是<%= link_to'显示',admin_category%>它输出http://0.0.0.0:3000/categories/7 但我希望是http://0.0.0.0:3000/admin/categories/7,有什么不对? – mlzboy 2010-10-30 12:13:21