2

让我们以 Stackoverflow 为例:

两种模式:问题和标签

一个问题可以有很多标签。

是否应该创建一个单独的表“Question_tags”来管理关联,或者有没有办法在 Questions 表中创建一个数组字段。

哪个更好?专用的“Question_tags”表会不会过大?

4

1 回答 1

4

强烈建议您使用标签模型而不是像哈希数组这样的序列化属性:

模型要灵活得多。将来您可能希望添加有关标签的新功能,例如搜索功能、自定义排序或符号。使用序列化属性,将很难做这种事情。

想象一下,您想找到每个带有“ hello-world ”标签的问题,您必须进行复杂的 SQL 查询来检索所有带有该标签的问题,而不是简单Tag.where(name: 'hello-world').first.questions地检索相关问题。

此外,您可以使您的标签模型多态,这将允许您将标签分配给您定义为“可标记”的每个对象。


要在模型中定义关联:

class Question < ActiveRecord::Base
  has_many :question_tag_relations
  has_many :tags, through: question_tag_relations

class Tag < ActiveRecord::Base
  has_many :question_tag_relations
  has_many :questions, through: question_tag_relations

class QuestionTagRelation < ActiveRecord::Base
  belongs_to :question
  belongs_to :tag
  validates :question_id, presence: true # optionnal
  validates :tag_id, presence: true # optionnal

您需要生成相应的迁移才能创建 question_tag_relations 表。

于 2013-10-02T14:56:55.880 回答