LoginSignup
2
1

More than 3 years have passed since last update.

Ruby on Rails5でid以外のカラムを主キーに設定している場合にidを取り出す

Posted at

スキーマレベルではPrimary keyを変えていない場合でも、モデル定義の中で主キーを変えることができます。
もともとはRailsの規約どおりにidを主キーとして使っていたけれども、途中からUUIDを主キーとして使うようになって↑のようなことをするケースもあるのではないでしょうか。

class Foo < ApplicationRecord
  self.primary_key = 'uuid'
end

しかし、これをするとDBのレコードには入っているはずのidfoo.idのような形で取り出すことができなくなります。
Railsコンソールに入って次のようにやってみると試すことができます。

> Foo.class_eval { primary_key = 'created_at' }
> Foo.first.id

created_atの値が返ってくるかと思います。

この場合、レコードに入っているidを取り出すには、次のようにします。

foo.attributes['id']

(余談)
もともとRails3で動いていたプロジェクトをRails5を使うように一気にアップデートしているときに、foo.idがidカラムの値ではなくてself.primary_keyに与えたカラムの値を返すように変わっていることに気づきました。
なのでいつからか仕様変更があったようです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1