如何播种但不要重复

问题描述 投票:0回答:2

嗨,我想在Rails中播种数据库,我有Labeling模型,它是Gossip模型和Tag模型的连接表。

我希望每个八卦都有至少一个标签,并且在1到3个标签之间。但是我不会在八卦中使用相同标签的两倍。

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之类的东西放在后面:如果尚不存在,但我不知道该怎么办,或者可能存在更好的解决方案。

谢谢您的帮助。

ruby-on-rails ruby database seed
2个回答
1
投票

您是否正在使用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


0
投票

您的意思是这样吗?

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
© www.soinside.com 2019 - 2024. All rights reserved.