0

データベースにデータを入力してから、すべてのユーザーを削除しました。ここで、Model.all.last を呼び出さずに、次に利用可能な ID を取得する必要があります (最後に使用されたのは 109 ですが、これが発生した場合は、私だけの ID だけでなく、どのような状況でも機能する必要があります)。これは可能ですか、どうすればできますか?

4

2 に答える 2

4

ActiveRecordModelクラスのテーブルを作成すると、 というテーブルが作成されmodelsます。このidテーブルの s はserial、シーケンスから値を取得する列になりますmodels_id_seq。このシーケンスがこれで生成した最後の値を取得できます。

select last_value from models_id_seq

必要なのは簡単なselect_value呼び出しだけです。

last_id = ActiveRecord::Base.connection
                            .select_value('select last_value from models_id_seq')
                            .to_i

id最後の値を見つけようとしているときに、他の何かがテーブルで動作しているという問題が発生することに注意してください。これも PostgreSQL 固有ですが、でタグ付けされているので、問題にはなりません。

于 2013-04-25T01:30:37.530 に答える
0

動的に行うには、値を別のテーブルに保存するのが最善の策だと思います。これは、レコードが追加されるたびにフィールドを更新するトリガーを使用して行うことができます。この方法は Rails アプリに依存しないため、おそらく Ruby で行うよりも優れた方法です。

また、手動更新のためにたまに必要な場合は、phpmyadmin のようなものを使用している場合は、下部のテーブル構造を調べることで値を取得でき、「次の自動インデックス」と表示されます。

于 2013-04-25T00:49:59.313 に答える