Нужно ли вручную создавать миграцию для таблицы соединений HABTM?
Я сейчас изо всех сил пытаюсь заставить HATBM работать правильно. У меня есть избитый scanario: статьи и теги. Я предполагаю, что HABTM следует использовать здесь, так как это отношение "многие ко многим".
Я не знаю, однако, если я должен вручную создать таблицу соединения (articles_tags в этом случае).
мой код в настоящее время выглядит следующим образом:
class Article < ActiveRecord::Base
has_and_belongs_to_many :tags
end
class Tag < ActiveRecord::Base
has_and_belongs_to_many :articles
end
когда я запускаю миграции, 3-я таблица не создается.
Кроме того, я хотел бы добавить, что моя третья таблица не несет никакой логики, только слепая назначение.
Я использую рельсы 2.2.2
4 ответов:
вы должны сделать это в миграции одной из таблиц или в отдельной миграции, если эти миграции были запущены:
create_table :articles_tags, :id => false do |t| t.references :article, :tag end add_index :articles_tags, [:article_id, :tag_id]это создаст таблицу для вас и
:id => falseговорит Rails не добавлять поле id в эту таблицу. Также есть индекс, который ускорит поиск для этой таблицы соединений.вы также можете создать модель (ArticlesTag) для этого и сделать:
# article.rb has_many :articles_tags has_many :tags, :through => :articles_tags # tag.rb has_many :articles_tags has_many :articles, :through => :articles_tags # article_tag.rb belongs_to :tag belongs_to :articleа затем создать таблицу в миграции, созданной из
script/generate model articles_tagзвонок.
вы, вероятно, также хотите добавить индекс к миграции:
add_index "article_tags", "article_id"
add_index "articles_tags", "tag_id"
однако, если вы хотите пометить функциональность я бы рекомендовал плагин acts_as_taggable_on rails:
http://www.intridea.com/tag/acts_as_taggable_on http://github.com/mbleigh/acts-as-taggable-on/
Я использовал его на проекте, и это было очень легко реализовать.
одна из проблем, с присоединяемой таблицы для мечения заключается в том, что он легко может получить уродливые создания таблицы для каждого типа контента, который вы хотите сделать taggable (т. е. comments_tags, posts_tags, images_tags и т. д.). Этот плагин использует таблицу тегов, которая включает в себя дискриминатор для определения типа контента без необходимости конкретной таблицы соединения для каждого типа.
в сочетании с этим Qeuestion (1-й answear)Как настроить типичное отношение ролей пользователей HABTM и 1-й answear отсюда, это должно быть понято даже обезьяной. Я новичок в RoR, и он работает как шарм
Comments