Posted at

【デバッグ共有】undefined method `〜' for #<ActiveRecord::ConnectionAdapters::PostgreSQL::TableDefinition:0x007fe7975659b0>

More than 1 year has passed since last update.


bin/rake db:migrateすると下記エラーが吐かれる

undefined method `date_time' for #ActiveRecord::ConnectionAdapters::PostgreSQL::TableDefinition:0x007fe7975659b0

date_timeが定義されていないとのこと。

環境はPostgrSQL


デバッグ

えそんなわけないやんと思って、まずはマイグレーションファイルを確認。

原因がわからず、参考URLの通り、NATIVE_DATABASE_TYPESという文字でエディタ検索をかけると、postgresql_adapter.rbにてActiveRecordと実際のDBの型を確認。


postgresql_adapter.rb


class PostgreSQLAdapter < AbstractAdapter
ADAPTER_NAME = "PostgreSQL".freeze

NATIVE_DATABASE_TYPES = {
primary_key: "bigserial primary key",
string: { name: "character varying" },
text: { name: "text" },
integer: { name: "integer", limit: 4 },
float: { name: "float" },
decimal: { name: "decimal" },
datetime: { name: "timestamp" },
time: { name: "time" },
date: { name: "date" },
daterange: { name: "daterange" },
numrange: { name: "numrange" },
tsrange: { name: "tsrange" },
tstzrange: { name: "tstzrange" },
int4range: { name: "int4range" },
int8range: { name: "int8range" },
binary: { name: "bytea" },
boolean: { name: "boolean" },
xml: { name: "xml" },
tsvector: { name: "tsvector" },
hstore: { name: "hstore" },
inet: { name: "inet" },
cidr: { name: "cidr" },
macaddr: { name: "macaddr" },
uuid: { name: "uuid" },
json: { name: "json" },
jsonb: { name: "jsonb" },
ltree: { name: "ltree" },
citext: { name: "citext" },
point: { name: "point" },
line: { name: "line" },
lseg: { name: "lseg" },
box: { name: "box" },
path: { name: "path" },
polygon: { name: "polygon" },
circle: { name: "circle" },
bit: { name: "bit" },
bit_varying: { name: "bit varying" },
money: { name: "money" },
interval: { name: "interval" },
oid: { name: "oid" },
}


ここで確認すると、date_timeではなく、datetimeであることがわかる。

どうやらこのファイルでPostgreSQLの場合の初期の型設定がなされているらしい。

datetimeに変更し、無事bin/rake db:migrateができました。

エラー内容自体は初心者感丸出しですが、この確認方法知っとくといいと思って、ご共有させていただきます。


参考

Rails探訪 ~ create_table 編 ~