Обновление Ruby on Rails: NoMethodError (неопределенный метод `type 'для nil: NilClass) - PullRequest
2 голосов
/ 08 февраля 2012

Я пытаюсь обновить приложение rails 3.0 до 3.1 (а затем и до 3.2), но сталкиваюсь со следующей проблемой:

В моей консоли:

1.9.3p0 :026 > Film.search('art')
  Sphinx Query (6.6ms)  art
  Sphinx  Found 323 results
  Course Load (2.1ms)  SELECT `films`.* FROM `films` WHERE `films`.`id` IN (159, 234, 237, 238, 239, 241, 259, 274, 310, 427, 671, 786, 859, 1015, 1037, 1104, 1108, 1351, 1547, 1622)
 => [#<Film id: 159, name: .......

Но если я попытаюсь сделать следующее в представлении,

def index
...
logger.debug ">>>>>>>>>>>>>> 1"
logger.debug ">>>>>>>>>>>>>> " +  Course.search('art').inspect
logger.debug ">>>>>>>>>>>>>> 2"
...
end

Я получаю следующий журнал:

Started GET "/films" for 127.0.0.1 at 2012-02-07 16:29:33 -0800
  Processing by FilmssController#index as HTML
>>>>>>>>>>>>>> 1
  Sphinx Query (5.1ms)  art
  Sphinx  Found 323 results
  Film Load (1.4ms)  SELECT `films`.* FROM `films` WHERE `films`.`id` IN (159, 234, 237, 238, 239, 241, 259, 274, 310, 427, 671, 786, 859, 1015, 1037, 1104, 1108, 1351, 1547, 1622)
Completed 500 Internal Server Error in 281ms

NoMethodError (undefined method `type' for nil:NilClass):
  app/controllers/films_controller.rb:52:in `index'

Если в контроллере заменить @ films = Film.search ('art') на @ films = Film.where ('id <100') </em>, тогда я получаю:

ActionView::Template::Error (undefined method `type' for nil:NilClass):
    1: 
    2: <div class="item" <%= "style=\"background:transparent url('/images/corner-official-33px.png') no-repeat 653px 1px;\"" if film.producer.is_official? %>>
    3:  <div class="left_column" style="margin-right:10px;">
    4:      <%= image_tag film.producer.picture_url(:avatar), :size => '56x56' %>
    5:      <%= link_to film.producer.short_name, producer_path(film.producer), :style => "font-size:11px;" %>
  app/views/films/_film_item.html.erb:2:in `_app_views_films__film_item_html_erb___118918907990974304_70130279039420'
  app/views/films/_films.html.erb:35:in `_app_views_films__films_html_erb__4156916298260674623_70130271252280'
  app/views/films/index.html.erb:7:in `_app_views_films_index_html_erb___995304993819916692_70130270918920'
  app/controllers/films_controller.rb:56:in `block (2 levels) in index'
  app/controllers/films_controller.rb:55:in `index'

Я изучал проблему уже пару часов, но все еще не уверен, что не так, и с чего начать отладку ...

У меня установлены следующие драгоценные камни: рельсы (3.2.1, 3.2.0, 3.1.3, 3.0.9) Мыслящий сфинкс (2.0.11, 2.0.10) will_paginate (3.0.3, 3.0.2)

UPDATE:

После игры я понял, что если я поставлю 'logger.debug Film.first.inspect' до того, как я выполню поиск или предложение where, код работает нормально ... без понятия, почему !! ! Есть идеи?

...