Rails (モデルの生成) は複数ではなく単数化されたテーブルを作成しています – モデルも単数テーブルを探しています
概要
次のコマンドを使用しました。
$ レール g モデル 装備
そして、レールは次のことを実行しました。
invoke active_record
create db/migrate/20160822040448_create_equipment.rb
create app/models/equipment.rb
invoke test_unit
create test/models/equipment_test.rb
create test/fixtures/equipment.yml
ご覧のとおり、移行は独特です。そこで、移行ファイルとテーブル名を次のように変更しました。
class CreateEquipments < ActiveRecord::Migration
def change
create_table :equipments do |t|
# ...
end
end
end
ここで、Rail のコンソール $rails c を開始する $ rake db:merge を実行した後、Equipment を開始しようとすると、テーブルが見つからないというエラーが発生します。
>> Equipment.new
PG::UndefinedTable: ERROR: relation "equipment" does not exist
LINE 5: WHERE a.attrelid = '"equipment"'::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 = '"equipment"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "equipment" does not exist
LINE 5: WHERE a.attrelid = '"equipment"'::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 = '"equipment"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
次の行をモデルに追加することで修正できました。
class Equipment < ActiveRecord::Base
self.table_name = 'equipments'
# ...
end
これで問題は解決しましたが、そもそも問題の原因が知りたいのです。
最後の注意: コンソールで #pluralize メソッドを実行してみましたが、文字列「Equipment」も複数形になりませんでした。
>> 'Equipment'.pluralize
=> "Equipment"
>> 'door'.pluralize
=> "doors"
解決策
装備に複数はありません
http://www.learnersdictionary.com/qa/equipments-equipment-noncount-mass-noun-singular-plural
これは、そのような単語に対して予期される動作です。