has_many通过与现有对象/ ActiveRecord的关联

时间:2012-11-01 02:36:10

标签: ruby-on-rails activerecord associations has-many-through

给定模型

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”相关联。

我如何以最优雅的方式做到这一点?

1 个答案:

答案 0 :(得分:1)

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

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