Sam Starling
Sam Starling

Reputation: 5378

Rails 3: belongs_to, has_one and Migrations

I'm new to Rails, and I'm coming to it from a Django background. I've come to terms with the fact that models and the database schema are separate in Rails, online Django. However, I'm still getting to grips with migrations.

My question is fairly simple - how do I add a relationship to a model using a migration? For example, I have Artist and Song as empty models that subclass ActiveRecord::Base at the moment, with no relationships whatsoever.

I need to move to doing this:

class Artist < ActiveRecord::Base
  has_many :songs
end

class Song < ActiveRecord::Base
  belongs_to :artist
end

But how do I change the schema to reflect this using rails g migrate? I'm using Rails 3.1.3.

Upvotes: 7

Views: 13598

Answers (3)

Prasanth_Rubyist
Prasanth_Rubyist

Reputation: 458

You can generate migration

rails g migration AddProcedureIdToUser procedure:references 

Thanks

Upvotes: 8

Dinatih
Dinatih

Reputation: 2476

Now, in Rails 4 you can do:

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

to an existing Model

Upvotes: 7

rabusmar
rabusmar

Reputation: 4143

You have to add the foreign key in your migration file, something like this:

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

  add_index :songs, :artist_id
end

Upvotes: 6

Related Questions