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

В очередной раз набирая те шесть строчек, которыми – по соглашению – нужно описать таблицу для связи «многие ко многим», я подумал: а почему в 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

Комментарии

  • why_go 15 января 2010

    говорят что HABTM – очень плохо. has_many :thought или как-то так

    • Леонид Шевцов 16 января 2010

      Почему же плохо? По-моему «плохо» – это делать лишнюю модель с бессмысленным названием типа Tagging, когда она на самом деле не нужна.

  • why_go 19 января 2010

    http://blog.hasmanythrough.com/2006/4/20/many-to-many-dance-off (найди таблицу сравнения)

    • Леонид Шевцов 19 января 2010

      Ну вот когда эти плюшки нужны – и модель нужна, а когда не нужны – то ни к чему.

Оставить комментарий

  • (или OpenID)
  •