私は以下を持っていますRails移行は完璧に動作します(無関係な部分は削除されました):
create_table :comments do |t|
t.text :body
t.references :post
end
author
列をユーザーのユーザーIDであるcomments
テーブルに追加したいのですが、どうすればいいのかわかりません(ただ、 execute
)を使用してMySql固有の構文を記述します。
私はadd_column here を見てきましたが、references
には言及していません。 TableDefinition#references を実際に見つけましたが、add_column
ステートメントでそれを使用する方法がわかりません。
これは可能ですか?また、MySqlの場合、「参照」機能が実際にテーブル間の関係を確立しないのは本当ですか?
これからポイントを得るには遅すぎますが、私は後世のための最善の方法を投稿すると思いました:)
使用する change_table
の代わりに create_table
すべてのTableDefinitionの長所を使用して、既に存在するテーブルに列を追加します。
self.up do
change_table :comments do |t|
t.references :author
end
end
これはささいなことのように思えるかもしれませんが、Deviseのような他のgemは独自のカスタムテーブル定義を多用しています。
add_reference :table_name, :reference, index: true
やっと手に入れた
add_column :locations, :state_id , :integer, :references => "states"
最初に、次を行います。
script/generate migration AddAuthorIdToComments
生成されたファイルを開き、次の行を追加します。
add_column :comments, :author_id, :integer
次に、モデルファイルで:
class User < ActiveRecord::Base
has_many :comments, :foreign_key => "author_id"
end
class Comment
belongs_to :author, :class_name => User
end
これを見てからしばらく経ちましたが、最後に移行が外部キーの作成をサポートしていないことを確認しました。ただし、幸いなことに そのためのプラグインがあります です。これを使用しましたが、うまく機能します。
新しい移行では、add_column(:table, :column_name, :type, :options)
で列を追加できます。