Ruby On Rails in UA/Разработка на ROR/ActiveRecord::Migration и foreign key

09 июня 2008, 22:48   ActiveRecord::Migration и foreign key
admin
Ruslan Voloshin
Живет: Odessa,UKR
Сообщений: 2441
Рейтинг: 616.0
Рег: 13 марта 2007
Его блог
  •  
Для добавления внешних ключей к таблицам можно расширать класс ActiveRecord::Migration добавив в него следующий метод def self.foreign_key(from_table, from_column, to_table) constraint_name = "fk_#{from_table}_#{from_column}" execute %{alter table #{from_table} add constraint #{constraint_name} foreign key (#{from_column}) references #{to_table}(id)} end Теперь можно использовать def self.up create_table ... do end foreign_key(:line_items, :product_id, :products) foreign_key(:line_items, :order_id, :orders) end Но возможно вы заходите добавить этот метот так что бы он был доступен во всех остальных миграциях. Для этого создадим файл migration_helpers.rb в папке lib. module MigrationHelpers def foreign_key(from_table, from_column, to_table) constraint_name = "fk_#{from_table}_#{from_column}" execute %{alter table #{from_table} add constraint #{constraint_name} foreign key (#{from_column}) references #{to_table}(id)} end end Теперь для добавления этого метода к миграции добавляем следующие строки в ваш миграционный файл. require "migration_helpers" #подключаем хелпер class CreateLineItems < ActiveRecord::Migration extend MigrationHelpers #загружаем метод
Операции с WM | SEO консультации
07 февраля 2010, 16:19   RE: ActiveRecord::Migration и foreign key
zaqwery
Илья Овсейко
Живет: Одесса
Сообщений: 47
Рейтинг: 18.0
Рег: 16 марта 2009
Его блог
  •  
Ruslan Voloshin Что касается внешних ключей. Так какой все таки способ более рациональный для рельс? 1) как написано выше Русланом, редактированием исходных классов? 2) в ActiveRecord::Base указывать опцию :foreign_key => ... 3) делать SQL запрос о создании в таблице внешнего ключа? а потом обращаться к этому полю из модели?
07 февраля 2010, 20:59   RE: RE: ActiveRecord::Migration и foreign key
admin
Ruslan Voloshin
Живет: Odessa,UKR
Сообщений: 2441
Рейтинг: 616.0
Рег: 13 марта 2007
Его блог
  •  
Илья Овсейко Если связи прописаны правильно рельсы поддерживают на основе кода целостность данных, если ты не полагаешься на то что твой код правильный и все связи прописаны, тогда генери сиквелы для прописывания и поддерживания целостности на уровне базы данных. Но запомни что тесты у тебя слетят однозначно, для написания тестов отключаются вообще внешние ключи чтобы не было проблем с фикстурами.
Операции с WM | SEO консультации
08 февраля 2010, 00:16   RE: RE: RE: ActiveRecord::Migration и foreign key
zaqwery
Илья Овсейко
Живет: Одесса
Сообщений: 47
Рейтинг: 18.0
Рег: 16 марта 2009
Его блог
  •  
Ruslan Voloshin нашел плагин Foreigner. Ща поставлю, посмотрю на схемы. по описаниям и отзывам, делает все как надо. Тесты не слетают. Foreigner