rails-通过关联在has_many中进行find_or_initialize

时间:2018-11-28 11:41:03

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

我定义了一组用于哈希标记的类,

class Hashtag < ApplicationRecord
  has_many :hashtag_references
end


class HashtagReference < ApplicationRecord
  belongs_to :hashtag
  belongs_to :hashtaggable, polymorphic: true
end

class Post < ApplicationRecord
   has_many :hashtag_references, as: :hashtaggable
   has_many :hashtags, through: :hashtag_references
end

我的目标是将标签(以字符串数组形式)附加到帖子,如果name已经存在,则不创建新的标签,或者如果帖子已经附加了标签,则不创建重复的hashtag_reference对此。目前,我使用“嵌套” find_or_initialize_by来完成此操作。

names.each do |name|
  post.hashtag_references.find_or_initialize_by(hashtag: Hashtag.find_or_initialize_by(name: name)
end

是否会有更多惯用的方式使用更少的数据库调用来获得相同的结果?

0 个答案:

没有答案