如何播种但不复制

How to seed but do not duplicate

你好,我想在 rails 中播种我的数据库,我有标签模型,它是 table 到八卦模型和标签模型的连接点。

我希望每个八卦至少有一个标签,标签在 1 到 3 个之间。但我不会八卦有2次相同的标签。

gossip_array = Gossip.all
​
gossip_array.each do |gossip|
    rand(1..3).times do |index|
        l = Labeling.new(gossip: gossip, tag: Tag.all.sample)
        l.save if
    end 
end

我想我必须在 if 之后添加类似这样的内容:如果这还不存在,但我不知道该怎么做,或者它可能存在更好的解决方案。

感谢您的帮助。

您使用的是 Rails 4 或更高版本吗?如果是这样,请查看 #find_or_create_by。示例(分为两行以使其更易于阅读):

tag = Tag.all.sample
Labeling.find_or_create_by(gossip: gossip, tag: tag)

这将首先查询具有给定 gossiptag 的标签。如果存在这样的标签,则什么也不会发生。但如果它不存在,则会使用给定的 gossiptag.

创建一个新的

Rails docs on ActiveRecord::Relation#find_or_create_by

你的意思是这样的?

gossip_array = Gossip.all

gossip_array.each do |gossip|
    rand(1..3).times do |index|
        Labeling.find_or_create_by(gossip: gossip, tag: Tag.all.sample)
    end 
end