Какова связь между этими двумя таблицами в RoR? - PullRequest
1 голос
/ 20 июля 2010

Я занимаюсь разработкой такого приложения, как stackoverflow, в котором вопросы или статьи содержат менее одного тега. И один тег должен иметь одну или несколько статей.

Итак, я делаю это при миграции в RoR. Я считаю, какие отношения подходят для обеих таблиц. В таблице статей следует использовать has_many, а в таблице тегов следует использовать has_many. Но я думаю, что нужно добавить еще одну таблицу в середине, что-то вроде ....

Итак, первый такой:

class Article < ActiveRecord::Base
  has_many :tags
end

class Tag < ActiveRecord::Base
  has_many :articles
end

или как-то так:

class Article < ActiveRecord::Base
  has_many :articleTagList
  has_many :tags, :through => : articleTagLists
end

class Tag < ActiveRecord::Base
  has_many :articleTagList
  has_many :articles, :through => :articleTagLists
end

class ArticleTagList < ActiveRecord::Base
  belongs_to :article
  belongs_to :tag
end

Ответы [ 2 ]

1 голос
/ 20 июля 2010

Отношения «многие ко многим» в нормализованной базе данных всегда будут нуждаться в третьей «справочной таблице».

Если вы денормализуетесь, вы можете обойтись только наличием идентификатора тега.в одном поле с разделителем между ними.Но вы также должны предоставить логику для обработки поиска.

Лично я бы просто пошел с нормализованным параметром.

0 голосов
/ 20 июля 2010

Если вы не хотите хранить какую-либо информацию в средней таблице (например, имя пользователя, добавившего тег X к вопросу Y), вы можете использовать has_and_belongs_to_many: http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many

Если вы хотите что-то сохранить, вам нужно создать среднюю модель, как ваш пример.В вашем примере модель ArticleTagList должна называться ArticlesTag, а таблица базы данных должна быть article_tags, по соглашению.

...