Tengo un modelo de evaluación. La evaluación tiene muchos puntajes. Cada vez que se crea una nueva evaluación, se crea un registro de puntaje para cada usuario que necesita una evaluación (ver a continuación el método actual que estoy utilizando para hacer esto). Así, por ejemplo, se pueden crear 40 registros de puntaje a la vez. El propietario de la evaluación actualiza cada registro de puntaje con el puntaje del usuario.Rails 3, instrucción de inserción SQL personalizada sin formato
Estoy buscando utilizar SQL sin procesar porque cada inserción es su propia transacción y es lenta.
me gustaría la conversión en una instrucción de inserción de masas utilizando SQL prima:
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
Alguna idea de cómo se puede hacer esto? Intenté adaptar una muestra de código del sitio de Coffee Heated de Chris Heald pero, sin dados.
¡Gracias a todos los que quieran ayudar!
EDIT 1
I olvidado mencionar el método actual se envuelve en una transacción.
Así que, esencialmente, estoy tratando de agregar esto al bloque de código para que todo esté insertado en una declaración (** Este fragmento de código proviene del sitio Coffee de Chris Heald que discutió el tema. Yo haría la pregunta allí, pero el mensaje es> 3 años de edad):.
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(", ")}"
que estaría feliz de mostrar el código de algunos de mis intentos que no funcionan ...
Gracias de nuevo!
Bueno, he improvisado algo que se parece al código anterior, pero me sale un error no válido instrucción SQL alrededor de la porción ('evaluation_id'. ¿Alguna idea?
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
Cualquier idea de lo que en el ? por encima de código SQL es la causa del error
la parte created_at no funciona para mí, ya que es la creación de una cadena que postgres no es el análisis. 'ActiveRecord :: StatementInvalid: PG :: SyntaxError: ERROR: error de sintaxis en o cerca de" 07 " LINEA 4: (1, 1, 100, 2017-02-20 07:00:56 +0000, 2017-02-20 07 ... ' – Gambo