2016-03-16 66 views
-1

我在轨道控制台内有这个块。什么是循环这个块的正确方法?

@idea = Idea.find_by(rand(1...Idea.count)) 
@roundid = Faker::Number.between(1, 3) 
@idea.round_id = @roundid 

我试图更新七个数据库行。我已经使用了下面的代码。

7.times do 
@idea = Idea.find_by(rand(1...Idea.count)) 
@roundid = Faker::Number.between(1, 3) 
@idea.round_id = @roundid 
end 

它不会做我所期望的。思考?

+2

欢迎之间分配各随机round_id到SO!不幸的是我无法解析你的问题。 :(你能给出更多的细节,说明这段代码的行为与你期望的不同吗? – BroiSatse

+0

什么是错误? – Jeff

+0

我想你需要3行和7列吗?如果是这样,那么你需要两个循环。所以我们可以提供帮助 – Deep

回答

0

如果您只是想每次随机抓取Idea,则可以使用更具表现力的Idea.all.sample

要获得一个随机数,你也不一定需要Faker,你可以做rand(3) + 1

如果round_idideas表中的一列,那么您需要在每次迭代中实际保存模型以确保您要保留的更改。你可以这样做

一个更快的方法是:

Idea.all.sample(7).each do |idea| 
    idea.update(round_id: rand(3) + 1) 
end 

这抓住了7个随机Ideas,遍历它们,1个3

+0

谢谢!这正是我想要做的。我希望我能在发布之前得出这个结论,但我显然有更多的学习要做。 –

+1

请注意,'Idea.all.sample'从数据库中提取所有*'Idea'。这可能会变得昂贵。 – Stefan

+1

这应该好多了=>'rand(1..3)' – 7urkm3n

相关问题