views:

48

answers:

2

Hi to all,

I'm new to the Ruby world, and there is something unclear to me in defining associations between models. The question is: where is the association saved?

For example, if i create a Customer model by executing:

generate model Customer name:string age:integer

and then i create an Order model

generate model Order description:text quantity:integer

and then i set the association in the following way:

class Customer < ActiveRecord::Base
  has_many :orders
end

class Order < ActiveRecord::Base
  belongs_to :customer
end

I think here is missing something, for example the foreign key between the two entities. How does it handle the associations created with the keywords "has_many" and "belongs_to" ?

Thanks

+1  A: 

You should add an (integer) column to your orders table, called 'customer_id'.

Jongsma
+2  A: 

Whenever you generate your order, you can do:

generate model Order description:text quantity:integer customer:references

And it will automatically create the foreign key in the migration for you. The rails convention is that every row will have a primary key called "id", and the foreign key is the table it is referencing, followed by an underscore, then id. So in this case the orders table will have an attribute called "customer_id"

Since you've already generated yours, you should create a new migration script that adds an integer column called "customer_id" to your orders table.

You don't want to modify an existing migration. Just create a new one that adds the column.

class add_customer_id_to_orders < ActiveRecord::Migration
  def self.up
    add_column :orders, :customer_id, :integer
  end

  def self.down
    remove_column :orders, :customer_id
  end
end

Note: If you've already done something to create data in your database, this is going to result in some null foreign keys, which you'll want to fix, or just delete and create new data.

Zachary