2010-10-30 5 views
0

i ont deux vues d'aideméthode Invoke sur la vue de rails3 problème Hepler

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


module CategoriesHelper 
    def test 
     return "b" 
    end 

i invoque méthode d'essai dans les vues/admin/catégories/index.html.erb

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

si j'utiliser admin :: CategoriesHelper.test il lancera une erreur comme un soufflet:

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) %> 

il est de retour b pas a

si je change le nom de la méthode comme test2 n'a pas eu la même chose avec CategoriesHelper il est beau travail

donc comment résoudre ce problème, je newibe dans des rails, je veux savoir pourquoi cela arrive, grâce

est là quelque chose de mal avec mon routes.rb?, mon dossier est routes.rb comme soufflet

namespace :admin do 
    resources :categories 
end 
resources :categories 

Répondre

0

tant votre Admin::CategoriesHelper et CategoriesHelper sont chargés et exposés dans vos vues. Cela signifie que le module qui a été chargé en dernier sera exécuté.

Pour illustrer mon point, votre vue charges auxiliaires comme ceci:

class MyView 
    include Helper1 
    include Helper2 
end 

Les deux Helper1 et Helper2 comprennent une méthode test. Dans ce cas, lorsque vous exécutez MyView#test, il exécute Helper2#test. Helper1#test a été remplacé et ne peut pas être accédé. Comme ActionView (ou tout ce qui est chargé de charger les helpers) charge les helpers dans un ordre arbitraire, vous avez des problèmes.

Ma solution est de méthodes de préfixe du module: espaces de noms

module CategoriesHelper 
    def test 
    end 
end 

module Admin::CategoriesHelper 
    def admin_test 
    end 
end 
+0

j'ai renommé admin_test, et il peut invoquer par admin_test, pourquoi il ne peut pas par Admin :: CategoriesHelper.admin_test? – mlzboy

+0

aussi j'ai une autre question relevent est <% = link_to 'Show', admin_category%> il sort http://0.0.0.0:3000/categories/7 mais j'espère est http://0.0.0:3000/admin/categories/7, qu'est-ce qui ne va pas? – mlzboy

Questions connexes