【问题标题】:invoke method on rails3 view hepler problem在rails3上调用方法查看hepler问题
【发布时间】:2010-10-30 11:06:01
【问题描述】:

我有两个视图助手

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 不一样 没问题

那么如何解决这个问题,我是新人,我想知道为什么会发生这种情况,谢谢

我的 routes.rb 有什么问题吗?,我的 routes.rb 文件如下所示

 namespace :admin do
    resources :categories
 end
 resources :categories  

【问题讨论】:

    标签: ruby-on-rails helper


    【解决方案1】:

    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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多