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

如果您对创建记录的顺序很灵活,则可以创建标签,然后在一行中创建两个组合:

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