3

Railsアプリの構築をいじっているだけで、ばかげたことをしたと確信しています。私は足場を走らせ、モデル Ave と Afe のスペルを間違えました。移行ファイルやビュー ファイルなどのすべてを確認して変更し、「ave」を検索して何か見逃していないかどうかを確認したと確信しています。とにかく移行を実行したところ、次のようになりました。

PG::UndefinedTable: ERROR: relation "aves" does not exist LINE 5: WHERE a.attrelid = '"aves"'::regclass ^ : SELECT a.attname, format_type(a.atttypid, a.atttypmod), pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = '"aves"'::regclass AND a.attnum > 0 AND NOT a.attisdropped ORDER BY a.attnum

Extracted source (around line #17):

15  # GET /afes/new
16  def new
17    @afe = Afe.new
18  end
19
20  # GET /afes/1/edit

postgsql インデックス、スキーマをチェックし、移行を消去して rake:db:reset を実行しました。私のスキーマ、モデル、およびコントローラーはクリーンです。その古い「ave/aves」参照はどこにもありません。アクティブなレコードで何かがハングしたように見えますが、どこから始めればよいかわかりません。

ダミープレイアプリですが、最初からやり直したくありません。移行を強制的に再度実行することはできますか (削除を取り消した場合)?

4

1 に答える 1

6

これは、モデル名の複数形を作成するために使用される規則である複数形化規則に関係しています。

 ActiveSupport::Inflector.pluralize "afe"
   => "aves"

したがって、Rails は の複数形をafeis と見なしavesます。

移行でテーブルの名前を に戻すavesか、これを に追加することで、問題を解決できconfig/initializers/inflections.rbます。

ActiveSupport::Inflector.inflections do |inflect|
  inflect.irregular 'afe', 'afes'
end
于 2013-11-05T08:37:16.787 に答える