2015-06-09 2 views
0

У меня есть таблица, которую я пытаюсь заполнить, чтобы в итоге создать красивую сетевую диаграмму. Одна из таблиц называется User, а другая называется отношениями. Я хотел бы заполнить их примерно по 10 записей. Отношение является одним пользователем для многих отношений.Как ограничить количество записей INSERT с помощью Populator in Rails

модель я использую

ActiveRecord::Schema.define(version: 20150603200530) do 

    create_table "relationships", force: true do |t| 
    t.integer "source" 
    t.integer "target" 
    t.integer "value" 
    end 

    create_table "users", force: true do |t| 
    t.string "name" 
    t.integer "group" 
    end 

end 

Я использую заселить камень. Это очень здорово

Таблица отношений связана с таблицей пользователя как relationship.source = user.id. Я хотел бы, чтобы генерировать значения randome для «источника», «цель» и «значение» в диапазоне от 1 до 10. в файле populate.rake (в Lib/активы) до сих пор у меня есть:

namespace :db do 
    desc "Erase and fill database" 
    task :populate => :environment do 
    require 'populator' 
    require 'faker' 

    [User, Relationship].each(&:delete_all) 

    User.populate 100 do |user| 
     user.name = Populator.words(1..3).titleize 
     Relationship.populate 1..10 do |relationship| 
     relationship.source = 1..10 
     relationship.target = 1..10 
     relationship.value = 1..10 
     end 
    end 
    end 
    end 

но я получаю ошибку:

ActiveRecord::StatementInvalid: SQLite3::SQLException: too many terms in compound SELECT: INSERT INTO "relationships" ("id", "source", "target", "value") VALUES (1, 9, 10, 6).... etc. 
+0

Этот камень может помочь вам https://github.com/stympy/faker – usmanali

+0

Не совсем достаточно гибкой, но спасибо –

+0

@usmanali - я нахожу 'ffaker' немного более надежным. – BroiSatse

ответ

2

Эта ошибка, кажется, исходит из SQLite, которая имеет предел, сколько записей вы можете вставить с одним INSERT заявление.

Вы можете попытаться уменьшить количество записей на INSERT, установив опцию Populator :per_query:

User.populate(100, :per_query => 10) 
+0

Да. Вот и все. Ты просто избил меня. ура –

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