ruby-on-rails – Rails 3,自定义原始SQL插入语句
发布时间:2020-12-16 22:17:29 所属栏目:百科 来源:网络整理
导读:我有一个评估模型.评价有很多分数.每当创建新的评估时,都会为需要评估的每个用户创建分数记录(请参阅下文,了解我正在使用的当前方法).例如,可以立即创建40个分数记录.评估所有者随后用用户的得分更新每个分数记录. 我正在寻找使用原始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的咖啡供稿网站讨论的主题,我会问那里的问题,但是这个帖子是> ; 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |