我正在开发一个像stackoverflow这样的应用程序,这些问题或文章只有一个标签。一个标签必须有一个或多个文章。
所以,我在RoR的迁移中这样做。我认为哪种关系适合两种情况。在article表中,应该使用“has_many”,并且在tag表中,应该使用“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
答案 0 :(得分:1)
规范化数据库中的多对多关系始终需要第三个“查找表”。
如果你进行非规范化,你就可以在一个字段中使用标记id,并在它们之间加上分隔符。但是你还必须提供处理检索的逻辑。
我个人只是选择了标准化的选项。
答案 1 :(得分:0)
如果您不想在中间表上存储任何信息(例如,将标记X添加到问题Y的用户的名称),则可以使用has_and_belongs_to_many: http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many
如果您想存储某些内容,则需要创建中间模型,作为示例。在您的示例中,ArticleTagList模型应按照约定称为ArticlesTag,数据库表应为articles_tags。