1

私はレールに慣れていないので、破棄時にレコードIDが更新されない可能性があります。

Rails scaffold を使用して、製品ページの MVC を生成しました。製品/新しいページからデータベースにエントリを追加すると、ID 番号がエントリに追加されます。ブラウザーでインデックス ビューの表示/編集/破棄リンクをロールオーバーすると、localhost:3000/products/1 の URL リンクが表示されます。破棄リンクを使用してエントリを削除すると、エントリは正しく削除されますが、別のエントリを追加すると、ID が 1 ではなく 2 として表示されます。データベースからエントリを削除するのに、ID を 1 にリセットしないのはなぜですか? .

これは、Rails アプリ sqlite3 の組み込みサーバー用です。

4

3 に答える 3

4

Sqlite はシーケンスを使用して、プライマリ ID に使用できる次の整数を決定します。最新のものでレコードを破棄しても、シーケンスは「戻りません」。それらは増加し続けます。一部のデータベースは、最大値に達するとゼロから再起動しますが、一部のデータベースはエラーになります。

一部のデータベースは、シーケンスをテーブルに関連付けます。ただし、一部のシーケンスは独自のものです。(必要に応じて) シーケンスを使用して、複数の異なるテーブルの一意の ID を取得できます。

詳細については、sqlite のドキュメントを確認してください...

于 2012-12-07T23:53:50.450 に答える
1

このコマンドrake db:schema:dumpは、現在の環境のスキーマを db/schema.rb にダンプします。リセットするか、すべてを削除して再度移行するには、rake db:setupWhich runs rake db:schema:loadand rake db:seed.

他の重要なコマンドのいくつかは次のとおりです。

rake db:schema:loadこのコマンドは、スキーマを現在の環境のデータベースにロードします。

rake db:schema:dumpこのコマンドは、現在の環境のスキーマを にダンプしますdb/schema.rb

rake db:setupこのコマンドは実行rake db:schema:loadされ、rake db:seed.

rake db:resetこのコマンドは実行rake db:dropされ、rake db:setup.

rake db:migrate:resetこのコマンドはrake db:drop、次に実行rake db:createされrake db:migrateます。

于 2015-11-30T09:04:19.703 に答える
0

データベースをrake db:drop (これによりデータベースが削除されます) してから、rake db:migrate を実行してテーブルを再度作成する必要があります。

于 2012-12-08T03:53:07.880 に答える