ruby-on-rails - 起動しない - rails5 ドキュメント




RailsコンソールからデータベースIDを変更しますか? (2)

私は小さなデータベースを持っており、Railsページからエントリを追加しています。 私はエントリの1つを「破壊」し、IDのシーケンスは1つ分スキップされます。 たとえば、42,43,44の代わりに42を、44を使用しています。

私は、コンソールから新しいオブジェクトのID番号を編集する方法があるのだろうかと思っていました。 私が試してみました:

record.id = 43
record.save

そして

record = record.new
record.attributes = { :id => 43 }

どちらもうまくいきませんでした。 私は非常に確かにこれのためのコンソールメソッドが必要ですが、私はGoogleで非常に具体的に見つけることができないと私はおそらくレールのAPIを誤って読んで...私はおそらくsqliteで直接SQLを介して行う必要があります?

ありがとう


実際には、新しいオブジェクトのIDを手動で設定できます。

record = Record.new
record.id = 1234
record.save

しかし、あなたがしようとしているのは、既存のオブジェクトのIDを更新することです。 record.id = 43を設定してrecord.id = 43を呼び出すと、ActiveRecordは次のようにSQLを生成しようとします:

update records set id = 43 where id = 43

更新しようとしているID が、変更しようとしているIDと同じであることに注意してください 。 それがうまくいかない理由です。

ですから、これを変更するにはSQLを使用する必要があります。 それが良いアイデアかどうかは別の問題ですが、時にはそれを行う必要があります。


これを実行する最良の方法は、SQLを直接実行し、この一時的なグリッチをシーケンス内で解決することです。

コンソール(ruby script / console)にアクセスし、次のように入力してみてください:

>> sql = "update records set id=43 where id=44"
>> ActiveRecord::Base.connection.execute(sql)

ここで44は新しく作成されたオブジェクトのID、43はテーブルにないオブジェクトです

がんばろう!





ruby