вызвать метод на rails3 view hepler - PullRequest
0 голосов
/ 30 октября 2010

у меня есть два помощника вида

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 это нормально работает

так как решить эту проблему, я новичок в рельсах, я хочу знать, почему это произошло, спасибо

что-то не так с моим rout.rb? Мой файл rout.rb выглядит так:

 namespace :admin do
    resources :categories
 end
 resources :categories  

1 Ответ

0 голосов
/ 30 октября 2010

Оба ваших 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...