Ho un modello di valutazione. La valutazione ha molti punteggi. Ogni volta che viene creata una nuova valutazione, viene creato un record di punteggio per ogni utente che ha bisogno di una valutazione (vedi sotto per il metodo corrente che sto usando per fare ciò.) Quindi, ad esempio, possono essere creati 40 record di punteggi contemporaneamente. Il proprietario della valutazione aggiorna quindi ogni record del punteggio con il punteggio dell'utente.Rails 3, istruzione di inserimento SQL raw personalizzata
Sto cercando di utilizzare SQL raw perché ogni inserto è la propria transazione ed è lento.
vorrei convertire la segue in un istruzione di inserimento massa utilizzando SQL prime:
def build_evaluation_score_items
self.job.active_employees.each do |employee|
employee_score = self.scores.build
employee_score.user_id = employee.id
employee_score.save
end
end
Ogni pensiero su come questo può essere fatto? Ho provato ad adattare un esempio di codice dal sito Coffee Powered di Chris Heald ma, niente da fare.
Grazie a chiunque sia disposto ad aiutare!
EDIT 1
ho trascurato di menzionare il metodo corrente è avvolto in una transazione.
Quindi, in sostanza, sto cercando di aggiungere questo al blocco di codice in modo che tutto sia inserito in una dichiarazione (** Questo snippit di codice proviene dal sito Coffee Powered di Chris Heald che ha discusso l'argomento. il post è> 3 anni):. di nuovo
inserts = []
TIMES.times do
inserts.push "(3.0, '2009-01-23 20:21:13', 2, 1)"
end
sql = "INSERT INTO user_node_scores (`score`, `updated_at`, `node_id`, `user_id`)VALUES #{inserts.join(", ")}"
sarei felice di mostrare il codice da alcuni dei miei tentativi che non funzionano ...
Grazie!
Beh, ho messo insieme qualcosa che somiglia il codice di cui sopra, ma ottengo un errore non valido un'istruzione SQL intorno alla porzione ('evaluation_id'. Ogni pensiero?
def build_evaluation_score_items
inserts = []
self.job.active_employees.each do |employee|
inserts.push "(#{self.id}, #{employee.id}, #{Time.now}, #{Time.now})"
end
sql = "INSERT INTO scores ('evaluation_id', `user_id`, 'created_at', `updated_at`)VALUES #{inserts.join(", ")}"
ActiveRecord::Base.connection.execute(sql)
end
alcuna idea di ciò che nel ? sopra SQL codice è causa l'errore
parte created_at non funziona per me dal momento che è la creazione di una stringa che postgres non è l'analisi. 'ActiveRecord :: StatementInvalid: PG :: SyntaxError: ERRORE: errore di sintassi ao vicino a" 07 " LINEA 4: (1, 1, 100, 2017-02-20 07:00:56 +0000, 2017-02-20 07 ... ' – Gambo