Rails 3迁移:添加引用列?
如果我创build一个新的轨道3迁移(例如)
rails g migration tester title:tester user:references 
,一切工作正常…但是,如果我添加一列沿线的东西:
 rails g migration add_user_to_tester user:references 
参考字段不被识别。 简而言之,问题是:如何从命令行添加引用列到rails迁移?
如果您正在使用Rails 4.x ,则现在可以使用引用生成迁移,如下所示:
 rails generate migration AddUserRefToProducts user:references 
就像你可以在导轨上看到的一样
编辑 :这是一个过时的答案,不应该适用于Rails 4.x +
当您可以使用整数id到您引用的类时,不需要添加引用。
我会说使用引用而不是普通的整数的好处是模型将与belongs_to预定义,因为模型已经创build,并且不会影响你迁移现有的东西时,目的是失去了一种。
所以我会这样做,而不是:
 rails g migration add_user_id_to_tester user_id:integer 
然后在Tester模型中手动添加belongs_to:user
请注意,您很可能也需要在该列上的索引。
 class AddUserReferenceToTester < ActiveRecord::Migration def change add_column :testers, :user_id, :integer add_index :testers, :user_id end end 
通过上述两个步骤,您仍然缺less外键约束。 这应该工作:
  class AddUserReferenceToTester < ActiveRecord::Migration def change add_column :testers, :user_id, :integer, references: :users end end 
您可以在更改迁移中使用引用。 这是有效的Rails 3.2.13代码:
 class AddUserToTester < ActiveRecord::Migration def change change_table :testers do |t| t.references :user, index: true end end def down change_table :testers do |t| t.remove :user_id end end end 
cf: http : //apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
 运行rails g migration AddUserRefToSponsors user:references将生成以下迁移: 
 def change add_reference :sponsors, :user, index: true end 
添加列时,需要将该列设置为整数,如果可能,请使用导轨约定。 所以对于你的情况,我假设你已经有一个testing和用户模型,testing人员和用户表。
要添加外键,您需要创build一个名称为user_id(约定)的整数列:
 add_column :tester, :user_id, :integer 
然后将belongs_to添加到testing仪模型中:
 class Tester < ActiveRecord::Base belongs_to :user end 
你也可能想为外键添加索引(这是引用已经为你做的):
 add_index :tester, :user_id 
这将做的伎俩:
 rails g migration add_user_to_tester user_id:integer:index 
您可以通过以下方式通过命令行添加对模型的引用:
 rails g migration add_column_to_tester user_id:integer 
这将生成一个迁移文件,如:
 class AddColumnToTesters < ActiveRecord::Migration def change add_column :testers, :user_id, :integer end end 
这工作正常,我每次使用它..
对于Rails 4
 生成器接受列types作为引用(也可以作为belongs_to )。 
 此迁移将创build一个user_id列和适当的索引: 
 $ rails g migration AddUserRefToProducts user:references 
产生:
 class AddUserRefToProducts < ActiveRecord::Migration def change add_reference :products, :user, index: true end end 
http://guides.rubyonrails.org/active_record_migrations.html#creating-a-standalone-migration
对于Rails 3
 助手被称为引用(也可以作为belongs_to )。 
 此迁移将创build适当types的category_id列。 请注意,您传递模型名称,而不是列名称。 活动logging为您添加_id 。 
 change_table :products do |t| t.references :category end 
 如果你有多态的belongs_to关联,那么引用将添加两个所需的列: 
 change_table :products do |t| t.references :attachment, :polymorphic => {:default => 'Photo'} end 
 将添加一个attachment_id列和一个默认值为Photo的stringattachment_type列。 
http://guides.rubyonrails.org/v3.2.21/migrations.html#creating-a-standalone-migration