[解決済み] Railsの移行: テーブルへのadd_referenceが、外部キーのカラム名がRailsの規則と異なる場合
2023-08-02 10:01:34
質問
以下の2つのモデルを持っています。
class Store < ActiveRecord::Base
belongs_to :person
end
class Person < ActiveRecord::Base
has_one :store
end
以下は問題点です。Peopleテーブル内に外部キーを作成するためのマイグレーションを作成しようとしています。しかし、Store の外部キーを参照するカラムの名前が store_id という名前がついておらず、代わりに foo_bar_store_id .
もし私がrailsの規約に従っているならば、このようにマイグレーションを行うでしょう。
class AddReferencesToPeople < ActiveRecord::Migration
def change
add_reference :people, :store, index: true
end
end
しかし、これは動作しません。なぜなら、カラム名が store_id となっていますが、これは foo_bar_store_id . では、高速なパフォーマンスを維持するために、外部キー名が異なるだけで、index: trueを維持するように指定するにはどうすればよいでしょうか?
どのように解決するのですか?
EDIT: 刻み目を見、読み続けない人のために!
この回答は、型破りな外部キーカラム名を持つという目標を達成する一方で、インデックスを使用すると
データベースに fk 制約を追加するわけではありません。
. を使用したより適切な解決策については、他の回答を参照してください。
add_foreign_key
や'add_reference'を使ったより適切な解決策を参照してください。
注意: 他の答えも常に見てください。
オリジナルの回答です。
あなたの
AddReferencesToPeople
マイグレーションで、フィールドとインデックスを手動で追加することができます。
add_column :people, :foo_bar_store_id, :integer
add_index :people, :foo_bar_store_id
そして、モデルにはこのように外部キーを知らせます。
class Person < ActiveRecord::Base
has_one :store, foreign_key: 'foo_bar_store_id'
end
関連
-
[解決済み】bundle installが "Could not locate Gemfile "を返す。
-
[解決済み] pg gem をインストールしようとすると 'libpq-fe.h' ヘッダが見つからない
-
[解決済み] RailsのRootディレクトリのパス?
-
[解決済み] 変更欄のRailsマイグレーション
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Devise Admin Roleの追加【終了しました
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Rails DBの移行 - テーブルを削除するには?
-
[解決済み】Rails 4で参照列のマイグレーションを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Ruby/Rails の「フック」とは何ですか?
-
[解決済み] どのようにrailsでラジオボタンを正しく使用するには?
-
[解決済み] Rails のインストールに失敗する: activesupport には Ruby のバージョン >= 2.2.2 が必要です。
-
[解決済み] ウェブパッカーがアプリケーションを見つけ出せない
-
[解決済み] Rubyで変数をインクリメントする [重複]。
-
[解決済み] rspec 3 - クラスメソッドをスタブ化する
-
[解決済み] Oauth2 Instagram API "リダイレクトURIが登録されたリダイレクトURIと一致しない"
-
[解決済み] 属性を割り当てる場合、引数としてハッシュを渡す必要がある
-
[解決済み] Ruby on rails アプリで ES6 (ES2015) を使用するにはどうすればよいですか?
-
[解決済み] references」マイグレーションでのカラム名の指定