我的项目有两个实体-- Projects和Words。因此,Project有许多Words,Word可以用于多个Projects。
Words表应该只包含unique words,这意味着如果一个项目要添加,已经在Words表中的word,在join表中将添加针对project_id的word_id。如果单词不存在,则应将其添加到关联中的表中,将其添加到联接表中。
到目前为止,我能够将存储在Projects表中的项目name和添加到Keyword表中的关键字name添加到表中。
我不相信我解决这个问题的方法是否好,我也不知道如何处理has_and_belongs_to_many(我不知道我需要一个has_many through关联,因为我在这一点上对模型什么都不做)。
发布于 2013-10-03 14:29:02
首先,在可能的情况下,绝对应该在has_and_belong_to_many上使用has_and_belong_to_many。您可以使用find_or_create_by确保只在尚未找到的地方创建关键字:
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轻松地添加关键字。
project = Project.create(name: 'My Project')
project.add_keyword('foo')https://stackoverflow.com/questions/19161717
复制相似问题