4

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時間費やしましたが、関連するものは何も見つかりませんでした. この問題の原因とその修正方法を教えてください。

4

2 に答える 2

1

私は有罪のものを見つけました: 外部キーを自動的に検出するために使用した「automatic_foreign_key」と呼ばれる小さな宝石です。行った変更をロールバックして削除し、テーブルを手動で変更すると、アプリケーションが再び機能しました。

助けてくれてありがとう!

于 2011-07-15T07:38:33.213 に答える
0

Groupは、このバージョンの postgresql または rails の予約語である可能性がありますrails-3.1.0-rc4 は Rails の最新バージョンです。別の単純なモデルを生成して確認します。

于 2011-07-14T15:01:13.503 に答える