Почему в Rails нет метода для создания HABTM-таблицы?

January 15, 2010 Ruby on Rails базы данных миграции

В очередной раз набирая те шесть строчек, которыми – по соглашению – нужно описать таблицу для связи «многие ко многим», я подумал: а почему в Rails нет готового метода для этого? Почему каждый раз надо переписывать один и тот же код, попутно вспоминая, как сделать таблицу без ID – ведь используются они только для HABTM?

Подумал и написал:

# config/initializers/create_habtm_table.rb
 
class ActiveRecord::Migration
  # create_habtm_table :posts, :tags
  def self.create_habtm_table(first_model,second_model)
    table_name = [first_model.to_s,second_model.to_s].sort.join('_').to_sym
    create_table table_name, :id => false do |t|
      t.belongs_to first_model.to_s.singularize.to_sym
      t.belongs_to second_model.to_s.singularize.to_sym
    end
    add_index table_name, (first_model.to_s.singularize+'_id').to_sym
    add_index table_name, (second_model.to_s.singularize+'_id').to_sym
  end
 
  # drop_habtm_table :posts, :tags
  def self.drop_habtm_table(first_model, second_model)
    table_name = [first_model.to_s,second_model.to_s].sort.join('_').to_sym
    drop_table table_name
  end
end

Buy Me a Coffee at ko-fi.com