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

говорят что HABTM – очень плохо. has_many :thought или как-то так
Почему же плохо? По-моему «плохо» – это делать лишнюю модель с бессмысленным названием типа Tagging, когда она на самом деле не нужна.
http://blog.hasmanythrough.com/2006/4/20/many-to-many-dance-off (найди таблицу сравнения)
Ну вот когда эти плюшки нужны – и модель нужна, а когда не нужны – то ни к чему.
а чего пулл реквест в rails-core не отправишь? клевая же штука