Rails と PostgreSQL の最新バージョンを使用してアプリケーションを書き始めたところです。データベースを作成し、必要な gem を追加し、database.yml ファイルを構成し、ユーザー (これは認証に Devise を使用) とグループの 2 つのモデルから始めました。スタート ページ用に追加のコントローラーを作成しました (単純なもの - リンクのリストを表示するためだけ)。テストデータをデータベースに追加することができました - 今朝戻って作業を続けたいと思うまでは。
ホームページにとどまっている限り、すべてが昨日のように見えました。しかし、グループ リストにアクセスしようとすると、次のエラーが発生しました。
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
他のアクションを調べたところ、結果は同じでした: 予期しない nil オブジェクトです。ユーザーに対してアクションを実行しようとしたときに、同じ問題が発生しました。
データベースの問題だと思ったので (データベースをまったく使用していないコントローラーには影響しなかったため)、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) でもう 1 つコマンドを実行すると、次の行でエラーが発生しました。
attr_list = columns.map { |c| "#{c.name}: #{c.type}" } * ', '
テーブルの列にアクセスできないようですが、理由がわかりません。同じユーザーとして、同じマシンに、同じオペレーティング システムとカーネルを使用してログインしています。好奇心から、別のアプリケーションを作成しましたが、再起動後も機能しませんでした。
答えを探すのに4時間費やしましたが、関連するものは何も見つかりませんでした. この問題の原因とその修正方法を教えてください。