2010-05-16 6 views
2

Я новичок в мире Ruby, и есть что-то неясное для меня в определении ассоциаций между моделями. Вопрос в следующем: где сохраняется ассоциация?Ruby on Rails и ассоциации баз данных

Например, если я создать модель клиента, выполнив:

generate model Customer name:string age:integer 

, а затем я создать модель Order

generate model Order description:text quantity:integer 

, а затем я установить связь следующим образом:

class Customer < ActiveRecord::Base 
    has_many :orders 
end 

class Order < ActiveRecord::Base 
    belongs_to :customer 
end 

Я думаю, что здесь что-то отсутствует, например, внешний ключ между двумя объектами. Как он обрабатывает ассоциации, созданные с ключевыми словами «has_many» и «belongs_to»?

Благодаря

ответ

3

Всякий раз, когда вы создаете ваш заказ, вы можете сделать:

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

И он будет автоматически создать внешний ключ в миграции для вас. Соглашение о рельсах состоит в том, что каждая строка будет иметь первичный ключ с именем «id», а внешний ключ - это таблица, на которую он ссылается, за которым следует знак подчеркивания, а затем идентификатор. Таким образом, в этом случае таблица заказов будет иметь атрибут, называемый «customer_id»

Поскольку вы уже создали свой, вы должны создать новый сценарий миграции, который добавит целочисленный столбец «customer_id» в таблицу заказов.

Вы не хотите изменить существующую миграцию. Просто создайте новый, который добавит столбец.

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 

Примечание: Если вы уже сделали что-то, чтобы создать в своей базе данных, это будет приводить в некоторых нулевых внешних ключей, которые вы хотите исправить, или просто удалять и создавать новые данные.

1

Вы должны добавить столбец (целое число), чтобы ваши заказы таблицы, которая называется "customer_id.

Смежные вопросы