Я только начал писать приложение, используя последнюю версию Rails и PostgreSQL.Я создал базу данных, добавил необходимый гем, настроил файл database.yml и начал работать с двумя моделями - User (эта использовала Devise для аутентификации) и Group.Я создал дополнительный контроллер для стартовой страницы (простой - только для отображения списка ссылок).Все выглядело хорошо, я мог добавлять данные испытаний в базу данных - пока я не вернулся сегодня утром и не хотел продолжать работу.
Пока я оставался на домашней странице, все выглядело так же, как вчера.Но когда я попытался получить доступ к списку групп, я получил следующую ошибку:
Routing Error
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.map
На странице не было никакой дополнительной информации, поэтому я заглянул в консоль Webrick и увидел следующее:
ActionController::RoutingError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.map):
app/controllers/groups_controller.rb:1:in `<top (required)>'
Первая строка моего контроллера, как обычно:
class GroupsController < ApplicationController
Я посмотрел на другие действия, и результат был таким же: неожиданный нулевой объект.Та же проблема возникла при попытке выполнить какое-либо действие для пользователя.
Я подозревал, что это проблема с базой данных (потому что она не затрагивала контроллер, который вообще не использовал базу данных), поэтому я пошел к консоли railsпосмотрим, смогу ли я добавить записи вручную.Я не смог.
ruby-1.9.2-p180 > group = Group.new
(some SQL)
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.map
from /home/lite/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.1.0.rc4/lib/active_record/persistence.rb:320:in `attributes_from_column_definition'
from /home/lite/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.1.0.rc4/lib/active_record/locking/optimistic.rb:69:in `attributes_from_column_definition'
from /home/lite/.rvm/gems/ruby-1.9.2-p180/gems/activerecord-3.1.0.rc4/lib/active_record/base.rb:1525:in `initialize'
from (irb):1:in `new'
from (irb):1
from /home/lite/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.0.rc4/lib/rails/commands/console.rb:45:in `start'
from /home/lite/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.0.rc4/lib/rails/commands/console.rb:8:in `start'
from /home/lite/.rvm/gems/ruby-1.9.2-p180/gems/railties-3.1.0.rc4/lib/rails/commands.rb:40:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
Я посмотрел самый верхний файл (persistence.rb) и искал строку 320.
319: def attributes_from_column_definition
320: Hash[self.class.columns.map do |column|
321: [column.name, column.default]
322: end]
323: end
Это определение дало мне небольшое представление о том, что можетпроисходило, поэтому я запустил еще одну команду в консоли (Group.inspect) и получил ошибку в следующей строке:
attr_list = columns.map { |c| "#{c.name}: #{c.type}" } * ', '
Похоже, я не могу получить доступ к столбцам моей таблицыно я понятия не имею почему.Я вошел в систему как тот же пользователь, на той же машине, используя ту же операционную систему и ядро.Из любопытства я создал другое приложение, и после перезагрузки оно тоже не работало.
Я провел четыре часа в поисках ответа, но не смог найти ничего связанного.Что может быть причиной этой проблемы и как ее исправить?