2016-03-16 3 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

Добро пожаловать на ТАК! К сожалению, я не могу разобрать ваш вопрос. :(Не могли бы вы дать более подробную информацию о том, как этот код ведет себя иначе, чем вы ожидаете? – BroiSatse

+0

Какая ошибка? – Jeff

+0

Я думаю, вам нужно 3 строки и 7 столбцов вправо? Если это так, вам понадобятся две петли. Или, пожалуйста, очистите его больше так что мы можем помочь – Deep

ответ

0

Если вы просто пытаетесь случайно захватить Idea каждый раз, вы можете использовать более выразительные Idea.all.sample.

Чтобы получить случайное число, вам также не обязательно нужен Faker, вы можете просто сделать rand(3) + 1.

Если round_id - это столбец в таблице ideas, вам действительно нужно сохранить модель на каждой итерации для тех изменений, которые вы делаете, чтобы сохранить их.

Один быстрый способ вы могли бы сделать это:

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

Это захватывает 7 случайных Ideas, итерацию над ними, и присваивает каждому случайное round_id между 1 и 3.

+0

Спасибо! Это именно то, что я пытался сделать. Хотелось бы, чтобы я мог прийти к такому выводу перед публикацией, но у меня, очевидно, есть тонна обучения. –

+1

Обратите внимание, что 'Idea.all.sample' извлекает * все *' Идеи 'из базы данных. Это может стать дорогостоящим. – Stefan

+1

Это должно быть намного лучше => 'rand (1..3)' – 7urkm3n

Смежные вопросы