0

与えられたモデル

class Composition < ActiveRecord::Base
  attr_accessible :content

  has_many :compositions_tags
  has_many :tags, :through => :compositions_tags

end

class Tag < ActiveRecord::Base
  attr_accessible :text

  has_many :compositions_tags
  has_many :compositions, :through => :compositions_tags

  validates_uniqueness_of :tag, only: [:create, :update], message: "already taken"
end

class CompositionsTag < ActiveRecord::Base
  belongs_to :composition
  belongs_to :tag
end

さて、例えば私は

Composition.create(content: "Hello").tags.create(text: "#hi")

結果は、コンテンツ「Hello」とテキスト「#hi」のタグが作成されたコンポジションになります。

次に、コンポジションを再度作成します。

Composition.create(content: "Goodmorning")

今、私が知らない、やりたかったのは、それも既存のタグにテキスト「#hi」で関連付けることです。

どうすれば最もエレガントな方法でそれを行うことができますか?

4

1 に答える 1

1

レコードを作成する順序に柔軟性がある場合は、タグを作成してから、2つのコンポジションを1行で作成できます。

Tag.create(text: "#hi").compositions.create([{content: "Goodmorning"},{content: "Hello"}])
于 2012-11-01T03:00:15.130 に答える