Нужно ли вручную создавать миграцию для таблицы соединений 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

394   4  

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 звонок.

обратите внимание, что это описано в API.

http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_and_belongs_to_many

вы, вероятно, также хотите добавить индекс к миграции:

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

    Ничего не найдено.