1

私のプロジェクトには と の 2 つのエンティティがProjectsありWordsます。したがって、 aProjectは多数Wordsあり、 aWordは複数で使用できますProjects

Wordsテーブルには のみを含める必要があります。unique wordsつまり、プロジェクトがテーブルにword既に存在するを追加するとWords、結合テーブルに が追加されます。または、単語が存在しない場合は、関連付けのテーブルに追加する必要があり、結合テーブルに追加する必要があります。word_idproject_id

nameこれまでのところ、テーブルに保存されているプロジェクトとテーブルに追加されProjectsているキーワードnameをテーブルに追加できKeywordます。

この問題を解決するための私のアプローチが良いかどうか確信が持てません。また、対処方法もわかりません(この時点ではモデルで何もしていないため、関連付けhas_and_belongs_to_manyが必要だとは思いませんhas_many through)。

4

1 に答える 1

3

has_many_throughまず、可能な限りover を使用する必要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

ヘルパー メソッドを使用してキーワードを簡単に追加できるようになりましたadd_keyword

project = Project.create(name: 'My Project')
project.add_keyword('foo')
于 2013-10-03T14:29:02.407 に答える