Невозможно получить грабли для добавления отдельных элементов в базу данных.
Я использую nokogiri для очистки и добавления информации в свою базу данных, и у меня возникли проблемы с созданием граблей для добавления отдельных элементов в базу данных. Мой исходный код был беспорядочным, поэтому я воссоздал ошибку, используя вместо этого массивы. Вот мой файл граблей.
namespace :test_array do
desc "Send Array To DB"
task send_db: :environment do
info_1 = []
info_2 = []
info_3 = []
info_4 = []
10.times do
info_1 << "test_1"
info_2 << "test_2"
info_3 << "test_3"
info_4 << "test_4"
end
info_1.each do |x|
test_1 = TestDb.new(test_1: x)
test_1.save
end
info_2.each do |x|
test_2 = TestDb.new(test_2: x)
test_2.save
end
info_3.each do |x|
test_3 = TestDb.new(test_3: x)
test_3.save
end
info_3.each do |x|
test_3 = TestDb.new(test_3: x)
test_3.save
end
end
end
И это вывод консоли
[#<TestDb id: 1, test_1: "test_1", test_2: nil, test_3: nil, test_4: nil, created_at: "2014-08-26 02:22:08", updated_at: "2014-08-26 02:22:08">, #<TestDb id: 2, test_1: "test_1", test_2: nil, test_3: nil, test_4: nil, created_at: "2014-08-26 02:22:08", updated_at: "2014-08-26 02:22:08">, #<TestDb id: 3, test_1: "test_1", test_2: nil, test_3: nil, test_4: nil, created_at: "2014-08-26 02:22:08", updated_at: "2014-08-26 02:22:08">, #<TestDb id: 4, test_1: "test_1", test_2: nil, test_3: nil, test_4: nil, created_at: "2014-08-26 02:22:08", updated_at: "2014-08-26 02:22:08">, #<TestDb id: 5, test_1: "test_1", test_2: nil, test_3: nil, test_4: nil, created_at: "2014-08-26 02:22:08", updated_at: "2014-08-26 02:22:08">, #<TestDb id: 6, test_1: "test_1", test_2: nil, test_3: nil, test_4: nil, created_at: "2014-08-26 02:22:08", updated_at: "2014-08-26 02:22:08">, #<TestDb id: 7, test_1: "test_1", test_2: nil, test_3: nil, test_4: nil, created_at: "2014-08-26 02:22:08", updated_at: "2014-08-26 02:22:08">, #<TestDb id: 8, test_1: "test_1", test_2: nil, test_3: nil, test_4: nil, created_at: "2014-08-26 02:22:08", updated_at: "2014-08-26 02:22:08">, #<TestDb id: 9, test_1: "test_1", test_2: nil, test_3: nil, test_4: nil, created_at: "2014-08-26 02:22:08", updated_at: "2014-08-26 02:22:08">, #<TestDb id: 10, test_1: "test_1", test_2: nil, test_3: nil, test_4: nil, created_at: "2014-08-26 02:22:08", updated_at: "2014-08-26 02:22:08">, ...]>
Я не уверен, что мне не хватает, но только первый цикл добавляет информацию в БД, а остальные, кажется, игнорируются. Я пробовал запускать отдельные рейк-задачи, но это не сработало, я предполагаю, что это проблема с моим использованием метода.each, но я не уверен, как это исправить. Помощь будет принята с благодарностью.
1 ответ
Решение
Я использую это сейчас, это работает, но не уверен, что это лучше всего подходит.
info_1.zip(info_2, info_3, info_4).each do |one, two, three, four|
TestDb.create(test_1: one, test_2: two, test_3: three, test_4: four)
end