Rails 3:belongs_to,has_one和Migrations

我是Rails的新手,我是从Django背景来的。 我已经接受了这样一个事实,即模型和数据库模式在Rails,在线Django中是分开的。 但是,我仍然在处理迁移问题。

我的问题很简单 – 如何使用迁移向模型添加关系? 例如,我将ArtistSong作为空模型,目前是ActiveRecord::Base子类,没有任何关系。

我需要这样做:

 class Artist < ActiveRecord::Base has_many :songs end class Song < ActiveRecord::Base belongs_to :artist end 

但是如何使用rails g migrate更改架构以反映这一点? 我正在使用Rails 3.1.3。

您必须在迁移文件中添加外键,如下所示:

 def change create_table :songs do |t| t.references :artist end add_index :songs, :artist_id end 

现在,在Rails 4中,您可以:

 class AddProcedureIdToUser < ActiveRecord::Migration def change add_reference :users, :procedure, index: true end end 

到现有的模型

您可以生成迁移

 rails g migration AddProcedureIdToUser procedure:references 

谢谢