相关疑难解决方法(0)

Rails 3,自定义原始SQL插入语句

我有一个评估模型.评价有很多分数.每当创建新评估时,都会为需要评估的每个用户创建评分记录(请参阅下面我正在使用的当前方法.)因此,例如,可以一次创建40个评分记录.然后,评估所有者使用用户的分数更新每个分数记录.

我正在寻找使用原始SQL,因为每个插入都是它自己的事务并且速度很慢.

我想使用原始SQL将以下内容转换为批量插入语句:

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
Run Code Online (Sandbox Code Playgroud)

有关如何做到这一点的任何想法?我试过改编一下来自Chris Heald的Coffee Powered网站的代码示例,但是没有骰子.

感谢愿意提供帮助的人!

编辑1

我忽略了提到当前方法被包装在一个事务中.

所以,基本上,我正在尝试将其添加到代码块中,因此所有内容都插入到一个语句中(**此代码snippit来自Chris Heald的Coffee Powered网站,讨论了该主题.我会在那里问问题,但帖子是> 3岁.):

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(", ")}"
Run Code Online (Sandbox Code Playgroud)

我很乐意展示我的一些尝试不起作用的代码......

再次感谢!

好吧,我拼凑了一些类似于上面代码的东西,但我得到一个SQL语句无效错误('evaluation_id'部分.有什么想法?

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 …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-3

10
推荐指数
3
解决办法
2万
查看次数

标签 统计

ruby-on-rails ×1

ruby-on-rails-3 ×1