让我们以 Stackoverflow 为例:
两种模式:问题和标签
一个问题可以有很多标签。
是否应该创建一个单独的表“Question_tags”来管理关联,或者有没有办法在 Questions 表中创建一个数组字段。
哪个更好?专用的“Question_tags”表会不会过大?
让我们以 Stackoverflow 为例:
两种模式:问题和标签
一个问题可以有很多标签。
是否应该创建一个单独的表“Question_tags”来管理关联,或者有没有办法在 Questions 表中创建一个数组字段。
哪个更好?专用的“Question_tags”表会不会过大?
我强烈建议您使用标签模型而不是像哈希数组这样的序列化属性:
模型要灵活得多。将来您可能希望添加有关标签的新功能,例如搜索功能、自定义排序或符号。使用序列化属性,将很难做这种事情。
想象一下,您想找到每个带有“ 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 表。