Railsの移行を覚え始めるところです。私はname
[文字列](および自動生成id
列)のtags
というテーブルを持っています。テーブルをname
列をid
と主キーとして使用するように移行したいと思います。既存のすべてのレコードが新しいスキーマで動作することを確認するには、どうすればよいですか?Railsの移行:idと異なる列を使用
1
A
答えて
3
アプローチは簡単ですが、実行は危険に見えます。マイグレーションを稼働させるのはかなり単純ですが、ダウンしていますか?わからない。
- あなたの名前の欄には、すべてのレコード
- 全体で固有であることを確認して、あなたのオブジェクトへの参照を格納し、名前にIDから、それらを変更する他のすべてのオブジェクトを検索します。
この列が一意でないことが分かった場合は、名前を重複したものなどの名前+ idと同じように変更する予定があります。これはすべて、移行から行うことができます。
私は、これはタグテーブルの周りにあなたのモデルであると仮定し、あなたが一例として道
に沿って見つける問題を解決するためにそれを使用するが、id列を残すだけお勧め:
class Tag < ActiveRecord::Base
end
を想定
class Thing < ActiveRecord::Base
has_one :tag
end
物事テーブル上TAG_ID列があります:あなたは、Tagモデルとシンプルな関連を持っている、少なくともこの他のモデル、事を、持っています。私は、これは、これらのものとの間の関連性は、新しいカラムに通してあることのRailsを告げる
class Thing < ActiveRecord::Base
has_one :tag, :foreign_key => "tag_name"
end
...この新しい列を指す外部キーを持つように関連付けを変更、タグ名と呼ばれる列を追加したいです。慣例により、 "tag_id"が検索されます。
は、移行に入ることができ、この変更を考える:add_column :things, :tag_name, :string
Thing.all.each do |thing|
if thing.tag
thing.tag_name = thing.tag.name
end
end
remove_column :things, :tag_id
これは、迅速かつ汚い例ですが、私は何かを見逃しているかもしれません。重要なことは、新しい列を追加し、関連付けを移動し、古い列を削除することです。
モデルが多対多関連または多型関連に関係する場合のような他のシナリオがありますが、一般的なアプローチはこれらのケースで同様です。
関連する問題
- 1. Django - ForeignKey()は行IDと異なる列を使用しますか?
- 2. 移行のID列を追加する
- 3. Rails 3 longtextを使用した移行
- 4. フライウェイを使用して異なるdbs間の移行
- 5. C++用のRailsの移行
- 6. [Id] replacementを使用したIDへの移行
- 7. Rails 3 Routes - idと異なるパラメータをルーティングする:
- 8. Rails IDと異なるものに基づくルート
- 9. svnとrailsの移行ファイル
- 10. Railsの移行にはPaperclipを使用する
- 11. EFCoreロールバック移行エラー:キー列として使用する無効な型の列
- 12. SELECT、異なる列の行をIDを共有する単一の行にフォーマット
- 13. 異なるテーブルの行を参照する列のIDの配列
- 14. 異なるテーブルビューセルの異なるビューコントローラに移行するストーリーボード
- 15. 異なるテーブルのFuelPHPの移行
- 16. Railsの異なる列タイプのベストプラクティス
- 17. 行列の異なる列に異なる関数を適用する
- 18. SlickGrid_AppendNew異なるIdを持つ行
- 19. 異なるデータベースからのデータ移行異なるテーブル
- 20. Railsは、私が使用してRailsの4移行ファイルを作成した移行ファイル
- 21. 同じ列の異なるモデルRails
- 22. Rails 3の移行 - 2dc_jqgrid、squirrel - 移行オプション?
- 23. 異なる表の列と行のマッピング
- 24. フラスコ移行異なるPostgresのスキーマ(__table_args__ = { 'スキーマ': 'test_schema']})を使用して
- 25. railsの移行ファイルを使用してSQLファイルを実行する
- 26. railsアプリケーションと異なるサーバーレーキタスク
- 27. Webサービスを使用したSharePointのコンテンツタイプとサイト列の移行
- 28. MySQLを使用して異なる挿入IDから行を取得
- 29. サードパーティのライブラリと異なるリンケージを使用した推移的な依存性
- 30. Rails - 別のIDを持つ別のDBにデータを移行する
あなたは実際にコードを与えていません – apneadiving
はい、私はいくつかを追加することができますが、彼はどんなモデルや他の例を扱うこともできませんでした。私に数分を与えると私は一緒に何かを置くでしょう:) – jaydel
ありがとう! id列を残し、名前列でタグを検索することについてアドバイスをします。特に、複数のユーザーが独自のタグを作成することになります。 – Chetan