Как отладить неопределенный метод для помощника в рельсах - PullRequest
1 голос
/ 14 июня 2011

У меня есть приложение rails, которое работает на виртуальной машине Ubuntu и в нескольких различных установках.

У меня новый компьютер, и после установки Ruby и Rails (с использованием rvm) я могу запустить приложение, но при доступе к представлениям вспомогательные функции не обнаруживаются. Строка helper :all находится в ApplicationController.

Я почти уверен, что это проблема моей среды, а не приложения. Есть ли пропавший камень, который мог бы вызвать эту проблему?

Можете ли вы порекомендовать какие-либо шаги, которые я мог бы предпринять для устранения этой проблемы?

MacBook-Air:cyberdojo mike$ ruby -v
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-darwin10.7.0]
MacBook-Air:cyberdojo mike$ rails -v
Rails 2.3.11

Фактическая ошибка, которую я получаю, такова:

NoMethodError in Dojo#create

Showing app/views/dojo/create.html.erb where line #62 raised:

undefined method `ellided_name' for #<ActionView::Base:0x101fabf70>
Extracted source (around line #62):

59:        value="<%=@dojo.name-%>" />
60: 
61: <h1 title="<%= @dojo.name-%>">   
62:   <%= ellided_name(@dojo.name, 40) %>
63: </h1>
64: 
65: <table align="center">

Исходный код можно посмотреть здесь: https://github.com/meekrosoft/cyberdojo

1 Ответ

2 голосов
/ 15 июня 2011

В вашем каталоге vendor есть несколько символических ссылок на /usr/share/rails.Вероятно, поэтому он работает на некоторых серверах (потому что на этих серверах эти символические ссылки работают), а не на других.

Ваши помощники не работают, потому что они должны быть внутри модулей, поэтому app/helpers/ellided_name.rb должно иметь:

module EllidedName
  # code you have in the file now
end

Я предполагаю, что в какой-то более старой версии Rails (той, что у вас есть в /usr/share/rails на ваших серверах) был разрешен немодульный синтаксис.* на основе версии 2.1.0 в вашем config/environments.rb это приложение существует уже давно, и если версия /usr/share/rails близка к 2.1, то это будет первая из многих проблем, с которыми вам придется столкнутьсяэто приложение как есть в 2.3.

Обновление

ОП обнаружил пробел в моей рекомендации, я просто добавляю его сюда для всех, кто находит это в Google - он также необходимо было добавить суффикс _helper к именам файлов, а также добавить обертки module в файлы, которые он должен был изменить app/helpers/ellided_name.rb на app/helpers/ellided_name_helper.rb и (он не сказал, но я 'я уверен) имя модуля, необходимое для отражения этого, так что EllidedNameHelper вместо EllidedName

...