add associations to exisiting models add associations to exisiting models ruby-on-rails ruby-on-rails

add associations to exisiting models


belongs_to association expect an association_id column in its corresponding table. Since cars belongs_to user, the cars table should have a user_id column. This can be accomplished 2 ways.

first, you can generate the column when you create the model

rails g model car user_id:references

or just add the user_id after you create the model like Richard Brown's answer. Be careful that if you use integer instead of references, you'd have to create the index yourself.

rails g migration add_user_id_to_cars user_id:integer

then in the generated migration, add

add_index :cars, :user_id

UPDATE:

As Joseph has mentioned in the comments, the need to add the index manually has already been addressed in the current version of Rails. I think it was introduced in Rails 4. You can read more of it in the official Rails guide for migrations. The gist of it is running the following generator

bin/rails g migration add_user_to_cars user:references

will create a migration with a line similar to

add_reference :cars, :user, index: true

This will add a user_id column to the cars table and it will also mark that column to be indexed.


Following @jvnill's explanation in rails 4 (and maybe in rails 3.2 too) you can do it like this too (avoiding the id parts and remembering the exact convetions):

rails g migration AddUserToCar user:references

Which will create the following migration, taking care of both adding the column and index with all correct conventions:

class AddUserToCar < ActiveRecord::Migration  def change    add_reference :cars, :user, index: true  endend

At the end as always run the migration:

rake db:migrate

View your schema.rb to view the new index and user_id column.


Generate a migration to create the association:

rails g migration AddUserIdToCars user_id:integerrake db:migrate