我定义了一组用于哈希标记的类,
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
是否会有更多惯用的方式使用更少的数据库调用来获得相同的结果?