首页
学习
活动
专区
圈层
工具
发布

多对多
EN

Stack Overflow用户
提问于 2013-10-03 14:19:53
回答 1查看 88关注 0票数 1

我的项目有两个实体-- ProjectsWords。因此,Project有许多WordsWord可以用于多个Projects

Words表应该只包含unique words,这意味着如果一个项目要添加,已经在Words表中的word,在join表中将添加针对project_idword_id。如果单词不存在,则应将其添加到关联中的表中,将其添加到联接表中。

到目前为止,我能够将存储在Projects表中的项目name和添加到Keyword表中的关键字name添加到表中。

我不相信我解决这个问题的方法是否好,我也不知道如何处理has_and_belongs_to_many(我不知道我需要一个has_many through关联,因为我在这一点上对模型什么都不做)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-03 14:29:02

首先,在可能的情况下,绝对应该在has_and_belong_to_many上使用has_and_belong_to_many。您可以使用find_or_create_by确保只在尚未找到的地方创建关键字:

代码语言:javascript
复制
class Project < ActiveRecord::Base
  has_many :project_keywords
  has_many :keywords, :through => :project_keywords

  def add_keyword(name)
    keywords << Keyword.find_or_create_by(name: name)
  end
end

class Keyword < ActiveRecord::Base
  has_many :project_keywords
  has_many :projects, :through => :project_keywords

  validates :name, presence: true, uniqueness: true
end

class ProjectKeyword < ActiveRecord::Base
  belongs_to :project
  belongs_to :keyword
end

现在您可以使用helper方法add_keyword轻松地添加关键字。

代码语言:javascript
复制
project = Project.create(name: 'My Project')
project.add_keyword('foo')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19161717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档