Reputation: 5378
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
Reputation: 458
You can generate migration
rails g migration AddProcedureIdToUser procedure:references
Thanks
Upvotes: 8
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
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