引用的add_column(Rails)
我有以下Rails迁移完美的作品(不相关的部分删除):
create_table :comments do |t| t.text :body t.references :post end  现在我想添加一个author列到我的comments表(这是一个用户的用户名),但我不知道该怎么做(我试图用execute来写MySql特有的语法) 。 
 我一直在看add_column 这里没有提到references 。 我实际上已经find了TableDefinition#引用,但我不知道如何使用它与一个add_column语句。 
这可能吗? 另外,对于MySql来说,“引用”function是否真的不build立表之间的关系呢?
虽然为时已晚,但我想我会为后人发布最好的方法:)
 使用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 
我已经看了这一段时间已经有一段时间了,但最后我检查了迁移不支持创build外键。 幸运的是, 它有一个插件 。 我用过这个,效果很好。
 您可以在新的迁移中通过add_column(:table, :column_name, :type, :options)添加列。