我有两个视图助手
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
答案 0 :(得分:0)
您的Admin::CategoriesHelper
和CategoriesHelper
都已加载并显示在您的视图中。这意味着将执行最后加载的模块。
为了说明我的观点,您的视图加载了这样的帮助:
class MyView
include Helper1
include Helper2
end
Helper1
和Helper2
都包含方法test
。在这种情况下,当您运行MyView#test
时,它将执行Helper2#test
。 Helper1#test
已被覆盖,无法访问。
因为ActionView(或负责加载帮助程序的任何东西)以任意顺序加载帮助程序,所以你遇到了麻烦。
我的解决方案是在命名空间模块中添加前缀:
module CategoriesHelper
def test
end
end
module Admin::CategoriesHelper
def admin_test
end
end