ruby-on-rails – Rails 3,自定义原始SQL插入语句

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails 3,自定义原始SQL插入语句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个评估模型.评价有很多分数.每当创建新的评估时,都会为需要评估的每个用户创建分数记录(请参阅下文,了解我正在使用的当前方法).例如,可以立即创建40个分数记录.评估所有者随后用用户的得分更新每个分数记录.

我正在寻找使用原始sql,因为每个插入是自己的事务,并且缓慢.

我想使用raw 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

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

感谢任何人愿意帮助!

编辑1

我忽略了当前的方法被包裹在一个事务中.

所以,本质上,我试图添加代码块,所以所有的东西都插入一个语句(**这个代码snippit是从Chris Heald的咖啡供稿网站讨论的主题,我会问那里的问题,但是这个帖子是&gt ; 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(",")}"

我很乐意从我的一些尝试中显示代码不起作用

再次感谢!

嗯,我已经拼凑了一些类似于上面的代码,但是我得到一个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

任何关于上述sql代码导致错误的想法?

解决方法

那么经过很多的试验和错误,这里是最后的答案.很酷的是所有的记录都是通过一个语句插入的.当然,跳过验证(所以如果您在创建时需要模型验证),但是在我的情况下,这并不是必需的,因为我正在做的是为每个员工的评估设置分数记录.当然,当工作领导更新员工的评估分数时,验证工作正常.
def build_evaluation_score_items
  inserts = []
  time = Time.now.to_s(:db)
  self.job.active_employees.each do |employee|
    inserts.push "(#{self.id},'#{time}')"
  end
  sql = "INSERT INTO scores (evaluation_id,user_id,created_at) VALUES #{inserts.join(",")}"
  ActiveRecord::Base.connection.execute(sql) 
end

猜你在找的Ruby相关文章