[解決済み】Rails 4で参照列のマイグレーションを追加する
質問
あるユーザーがたくさんのアップロードをしています。このような場合、カラムを
uploads
テーブルを参照し
user
. 移行はどのようにすればよいのでしょうか。
私が持っているのはこんな感じです。私は、(1)を使用すべきかどうか迷っています。
:user_id, :int
または(2)
:user, :references
. (2)がうまくいくかどうかもわからない。ただ、これを"rails"方式でやってみようとしただけです。
class AddUserToUploads < ActiveRecord::Migration
def change
add_column :uploads, :user_id, :integer
end
end
Rails 3 以外の関連質問です。 Rails 3 のマイグレーション。参照列を追加する?
解決方法は?
Rails 4.x
こんな時
をすでに持っています。
users
と
uploads
テーブルを作成し
新しい関係を追加する
の間にある。
必要なことは、次のコマンドでマイグレーションを生成するだけです。
rails g migration AddUserToUploads user:references
というように、マイグレーションファイルが作成されます。
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
end
end
そして、マイグレーションを実行するには
rake db:migrate
.
このマイグレーションでは、新しいカラム名
user_id
から
uploads
テーブル(参照
id
の列を
users
テーブル)、PLUSは新しいカラムにインデックスを追加します。
UPDATE [Rails4.2用]の場合
Railsは参照整合性を維持するために信頼することができません。 リレーショナルデータベース が私たちを助けてくれます。これはどういうことかというと、外部キー制約を データベースレベル を設定し、この参照整合性に違反する操作をデータベースが拒否することを保証します。infogetさんのコメントにもあるように Rails 4.2 のネイティブサポートが同梱されています。 外部キー(参照整合性) . 必須ではありませんが、上で作成したリファレンスに外部キー(非常に便利なので)を追加しておくとよいでしょう。
に外部キーを追加するには 既存の参照 の場合、外部キーを追加するために新しいマイグレーションを作成します。
class AddForeignKeyToUploads < ActiveRecord::Migration
def change
add_foreign_key :uploads, :users
end
end
完全に作成するには 外部キーによる新しい参照(Rails 4.2)。 の場合、以下のコマンドでマイグレーションを生成します。
rails g migration AddUserToUploads user:references
というように、マイグレーションファイルが作成されます。
class AddUserToUploads < ActiveRecord::Migration
def change
add_reference :uploads, :user, index: true
add_foreign_key :uploads, :users
end
end
これは、新しい外部キーを
user_id
カラムの
uploads
テーブルを使用します。キーは
id
カラムの
users
テーブルを作成します。
NOTE
これは、リファレンスを追加することに加えてなので、やはり
まず参照を作成し、次に外部キーを作成します。
(
外部キーは、同じマイグレーションで作成するか、別のマイグレーションファイルで作成するかを選択できます。
). Active Record は単一カラムの外部キーしかサポートしておらず、現在は
mysql
,
mysql2
と
PostgreSQL
アダプタがサポートされています。のような他のアダプタでは試さないでください。
sqlite3
など。参照
Railsのガイドです。外部キー
を参照してください。
関連
-
[解決済み】Rails 4 RoutingError: ルートが一致しない[POST]。
-
[解決済み] heroku push rejected, failed to compile Ruby/rails app
-
[解決済み] DestroyとDeleteの違い
-
[解決済み] Errno::EACCESS: パーミッションが拒否された @ dir_s_mkdir
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] rails erb フォームヘルパー options_for_select :selected
-
[解決済み] Railsです。gemを使った特定バージョンのライブラリのアンインストール
-
[解決済み] サーバーはRailsで既に稼働している
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] heroku open - no app specified
-
[解決済み] Ruby on Railsのランナー
-
[解決済み] DestroyとDeleteの違い
-
[解決済み] nil:NilClass の未定義メソッド `each' - しかし、なぜ?
-
[解決済み] railsで':remote => true'はどのように動作するのでしょうか?
-
[解決済み] "render :nothing => true" は空のプレーンテキストファイルを返すのですか?
-
[解決済み] レイル 4 radio_button_tag default not selected
-
[解決済み] Rails 4で、以前のバージョンのRailsでattr_accessibleを使用していた状況に遭遇した場合、Forbidden Attributes Errorが発生する。
-
[解決済み] Rails 3 のマイグレーション。参照列を追加する?