2015-07-10 3 views
1

Невозможно определить, что происходит с миграцией файла sql-файла. пожалуйста, помогите:Ошибка при миграции - ошибка: у вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее

я запустить грабли БД: мигрировать

ошибка:

mysql2 :: Ошибка: У вас ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «)» в строке 1: UPDATE photos SET vote_count = 0, rating = 0 WHERE id NOT IN()/home/user/myapp/appmame/db /migrate/20131110162613_recalculate_photos_rating.rb:8:in `вверх»

class RecalculatePhotosRating < ActiveRecord::Migration 
    def up 
    if Vote.where("subject_type='Photo' and rating > 1").count > 0 
     ActiveRecord::Base.connection.execute "DELETE FROM votes WHERE subject_type='Photo' AND rating <= 5" 
     ActiveRecord::Base.connection.execute "UPDATE votes SET rating=1 WHERE subject_type='Photo'" 
    end 
    pids = Vote.where(subject_type: 'Photo').pluck(:subject_id).uniq 
    ActiveRecord::Base.connection.execute "UPDATE photos SET votes_count = 0, rating = 0 WHERE id NOT IN (#{pids.join(', ')})" 
    ActiveRecord::Base.connection.execute "UPDATE photos SET rating=(SELECT COUNT(*) FROM votes WHERE votes.subject_type='Photo' AND subject_id=photos.id) WHERE id IN (#{pids.join(', ')})" 
    ActiveRecord::Base.connection.execute "UPDATE photos SET votes_count=(SELECT COUNT(*) FROM votes WHERE votes.subject_type='Photo' AND subject_id=photos.id) WHERE id IN (#{pids.join(', ')})" 
    end 

    def down 
    end 
end 

ответ

1

Вы должны проверить, если pids запрос возвращает пустой результат:

class RecalculatePhotosRating < ActiveRecord::Migration 
    def up 
    if Vote.where("subject_type='Photo' and rating > 1").count > 0 
     ActiveRecord::Base.connection.execute "DELETE FROM votes WHERE subject_type='Photo' AND rating <= 5" 
     ActiveRecord::Base.connection.execute "UPDATE votes SET rating=1 WHERE subject_type='Photo'" 
    end 
    pids = Vote.where(subject_type: 'Photo').pluck(:subject_id).uniq 
    unless pids.empty? 
     ActiveRecord::Base.connection.execute "UPDATE photos SET votes_count = 0, rating = 0 WHERE id NOT IN (#{pids.join(', ')})" 
     ActiveRecord::Base.connection.execute "UPDATE photos SET rating=(SELECT COUNT(*) FROM votes WHERE votes.subject_type='Photo' AND subject_id=photos.id) WHERE id IN (#{pids.join(', ')})" 
     ActiveRecord::Base.connection.execute "UPDATE photos SET votes_count=(SELECT COUNT(*) FROM votes WHERE votes.subject_type='Photo' AND subject_id=photos.id) WHERE id IN (#{pids.join(', ')})" 
    end 
    end 

    def down 
    end 
end 
+0

Я вставленный если pids.empty? и снова та же ошибка. – dev85

+0

извините, теперь работайте, спасибо – dev85

 Смежные вопросы

  • Нет связанных вопросов^_^