2015-10-14 2 views
0

Вот реки задача:Как написать эту задачу ruby ​​rake в прямом postgresql?

task :map_comment_to_user => :environment do 
    Comment.all.each do |c| 
     a   = Admin.where(mongo_id: c.mongo_user_id).first 
     u   = User.where(email: a.email).first 
     c.user_id = u.id 
     c.save 
    end 
    end 

Я облажался миграция из таблиц администратора => User, и электронная почта является уникальным позволяет мне сшить их вместе. Но это так медленно.

Как написать выше в прямом PSQL?

UPDATE comments c 
SET c.user_id = u.id 
FROM users u admins a 
WHERE c.mongo_user_id == a.mongo_id 
    AND u.email = a.email; ??? 
+0

Есть ли какие-либо ассоциации между 'comments/admins/users' прямо сейчас? – Anthony

ответ

1

Ваш SQL очень близок. Это просто требует нескольких незначительных изменений синтаксиса.

UPDATE comments c 
SET user_id = u.id 
FROM users u, admins a 
WHERE c.mongo_user_id = a.mongo_id 
    AND u.email = a.email; 
0

Это может сэкономить вам немало затрат на инициализацию объекта и ускорить работу для вас.

Comment.select(:id,:user_id).each do |c| 
    email = Admin.where(mongo_id: c.mongo_user_id).pluck(:email).first 
    uid = User.where(email: email).pluck(:id).first 
    c.user_id = uid 
    c.save 
end 
Смежные вопросы