嗨,我想在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之类的东西放在后面:如果尚不存在,但我不知道该怎么办,或者可能存在更好的解决方案。
谢谢您的帮助。
您是否正在使用Rails 4或更高版本?如果是这样,请签出#find_or_create_by
。示例(分成两行以使其更易于阅读):
tag = Tag.all.sample
Labeling.find_or_create_by(gossip: gossip, tag: tag)
这将首先查询具有给定gossip
和tag
的标签。如果存在这样的标签,则什么也不会发生。但是,如果不存在,则使用给定的gossip
和tag
创建一个新的。
您的意思是这样吗?
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