1. ホーム
  2. ruby-on-rails

[解決済み] ActiveRecordの作成時のidをオーバーライドする

2022-10-10 05:29:34

質問

作成時にモデルのid値をオーバーライドする方法はありますか?以下のようなものです。

Post.create(:id => 10, :title => 'Test')

があれば理想的ですが、明らかにうまくいきません。

どのように解決するのですか?

id は attr_protected であるため、mass-assignment で設定することはできません。 しかし、手動で設定する場合は、ちょうど動作します。

o = SomeObject.new
o.id = 8888
o.save!
o.reload.id # => 8888

もともとの動機はわかりませんが、私はActiveHashモデルをActiveRecordに変換するときにこのようにしています。 ActiveHashでは、ActiveRecordで同じbelongs_toセマンティクスを使用できますが、マイグレーションを行ってテーブルを作成し、データベースを呼び出すたびにオーバーヘッドが発生する代わりに、データをymlファイルに格納するだけです。 データベースの外部キーは、ymlのメモリ内のidを参照します。

ActiveHashは、頻繁に変更されず、開発者によってのみ変更されるピックリストや小さなテーブルにとって素晴らしいものです。 そのため、ActiveHashからActiveRecordに移行する場合、すべての外部キーの参照を同じにするのが最も簡単です。