has_many через ассоциацию с существующим объектом / ActiveRecord

Данные модели

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")

Результатом будет созданная композиция с содержимым «Привет» и тег с текстом «#привет».

Затем я снова создаю Композицию.

Composition.create(content: "Goodmorning")

Теперь то, что я не знаю и хотел бы сделать, это связать это с существующим тегом с текстом «#hi».

Как мне сделать это самым элегантным способом?


person neilmarion    schedule 01.11.2012    source источник


Ответы (1)


Если вы можете выбрать порядок создания записей, вы можете создать тег, а затем создать две композиции в одной строке:

Tag.create(text: "#hi").compositions.create([{content: "Goodmorning"},{content: "Hello"}])
person cdesrosiers    schedule 01.11.2012