Создание таблиц соединений для ассоциаций has_many и own_to

Новичок в Rails 3... Я работаю над созданием системы авторизации, которая, например (yammer), имеет экземпляры, к которым принадлежат пользователи. У меня есть две таблицы

Пользователи (электронная почта, пароль...) own_to :instance

Экземпляр (доменное имя, активный....) has_many :users

Я добавил принадлежности_к и has_many к моделям, но схема не была обновлена, чтобы добавить соединение, которое, как я полагаю, будет столбцом instance_id в таблице пользователя. Как это достигается в Rails 3? Мысли, предложения?


person AnApprentice    schedule 07.09.2010    source источник


Ответы (1)


Вы должны добавить эти столбцы в схему путем миграции.

http://guides.rubyonrails.org/migrations.html

Пытаться:

script/rails генерирует миграцию AddInstanceToUsers

затем перейдите в папку db/migrations, найдите новый файл и сделайте так:

class AddInstanceToUsers < ActiveRecord::Migration 

  def self.up 

    add_column :users, :instance_id, :integer  

  end 

  def self.down 

    remove_column :users, :instance_id

  end

end

затем беги

rake db:migrate

в вашей консоли.

person sled    schedule 07.09.2010
comment
Спасибо, След, со ссылками ничего делать не надо? По какой-то причине я думал, что Rails 3 достаточно умен, чтобы делать это автоматически, когда он видит - person AnApprentice; 07.09.2010
comment
Кроме того, столбец instance_id пользователя должен иметь индекс. Вам нужно добавить еще одну миграцию, чтобы это произошло? - person AnApprentice; 07.09.2010
comment
Rails никогда не изменит что-либо в вашей схеме, если вы измените модель. Вы можете использовать t.references :instance в своей миграции, см. ссылку, которую я разместил. Вы можете добавить индекс в ту же миграцию, если хотите. Просто добавьте строку add_index :users, :instance_id (без кавычек, конечно) после add_column. - person sled; 07.09.2010
comment
стрелять я уже миграцию. Означает ли это, что уже поздно добавлять индекс? - person AnApprentice; 07.09.2010
comment
да .. просто создайте еще один или сделайте откат, измените его и выполните повторную миграцию. Я бы рекомендовал создать новую миграцию. - person sled; 07.09.2010
comment
Итак, что-то вроде: script/rails генерирует миграцию AddInstanceIndexToUsers, затем убеждается, что индекс находится в файле миграции, затем запускает db: migrate? Это оно? - person AnApprentice; 07.09.2010
comment
да это оно. Кстати, имя миграции не соответствует соглашению. Вы можете назвать его как угодно. - person sled; 07.09.2010