Главная > Программирование > Foreign keys для ActiveRecord

Foreign keys для ActiveRecord

Делаю очередной проект на Ruby on Rails. Как обычно, в миграциях понадобились foreign keys на уровне БД. Окинул взглядом все плагины, которые смог найти в google и на github.com. Ни один из них не умеет делать FK, используя ActiveRecord::ConnectionAdapters::Table#references и ActiveRecord::ConnectionAdapters::TableDefinition#references.

Поэтому сел и написал свой плагин: active_record_foreign_keys.

Установка:

Rails::Initializer.run do |config|
  ...
  config.gem "active_record_foreign_keys", :source => "http://gemcutter.org"
  ...
end
$ rake gems:install

Использование:

def self.up
  # create reference table
  create_table :users do |t|
  end

  # create referencing table
  create_table :a_examples do |t|
    t.references :user, :foreign_key => true
  end
  # or
  create_table :b_examples do |t|
    t.references :user, :foreign_key => { :on_update => :cascade, :on_delete => :restrict }
  end
  # or
  create_table :c_examples do |t|
  end
  add_foreign_key :c_examples, :user_id, :users, :id, :on_update => :no_action, :on_delete => :set_null
  # or change existing table
  change_table :d_examples do |t|
    t.references :user, :foreign_key => true
  end
end
def self.down
  # remove constraint
  remove_foreign_key :examples, :user_id, :users, :id
end

Плагин тестировался только под PostgreSQL, но по идее должен работать и под MySQL, и под Sqlite.

Программирование , , ,

DeliciousFacebookDiggRSS FeedStumbleUponTwitter
  1. 21 Октябрь 2009 в 21:20 | #1

    А чем этот плагин не подошел?
    http://github.com/matthuhiggins/foreigner

  2. Memph1s
    22 Октябрь 2009 в 10:53 | #2

    Класс, спасибо, приходилось вписывать сиквел код, теперь стало намного удобнее(;

  3. 22 Октябрь 2009 в 11:37 | #3

    Romashka
    К сожалению, этот плагин я не нашёл, перед тем как сесть писать свой :(

  4. 12 Февраль 2010 в 03:12 | #4

    Хорошее решение проблемы, только удаление индекса в MySql выдаёт ошибку, т.к. ищет таблицу *.pg_constraint которой нет.

  5. 12 Февраль 2010 в 03:35 | #5

    Александр
    Думаю, имеет смысл использовать плагин foreigner :)

  6. 12 Февраль 2010 в 03:58 | #6

    собственно его и использую, но в этом плагине понравился синтаксис =)

  1. Пока что нет уведомлений.