Rails 3:belongs_to,has_one和Migrations

Sam*_*ing 5 ruby ruby-on-rails ruby-on-rails-3

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

我的问题很简单 - 如何使用迁移向模型添加关系?例如,我现在拥有ArtistSong作为空模型的子类ActiveRecord::Base,没有任何关系.

我需要继续这样做:

class Artist < ActiveRecord::Base
  has_many :songs
end

class Song < ActiveRecord::Base
  belongs_to :artist
end
Run Code Online (Sandbox Code Playgroud)

但是,如何更改架构以反映这种情况rails g migrate?我正在使用Rails 3.1.3.

rab*_*mar 6

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

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

  add_index :songs, :artist_id
end
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,你可以使用`add_column:songs,:artist_id,:int`,或者如果你想在你的表上做一些更改,`change_table`,使用类似上面的语法.您可以在此处阅读有关迁移的更多信息:http://guides.rubyonrails.org/migrations.html (3认同)

Din*_*tih 6

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

class AddProcedureIdToUser < ActiveRecord::Migration
  def change
    add_reference :users, :procedure, index: true
  end
end
Run Code Online (Sandbox Code Playgroud)

到现有的模型


pra*_*ist 6

您可以生成迁移

rails g migration AddProcedureIdToUser procedure:references 
Run Code Online (Sandbox Code Playgroud)

谢谢