Если вы используете VoteFu (который выглядит так, как вы), то я бы порекомендовал вам перейти к использованию Integers для хранения значений голосов вместо: boolean.
Единственная причина, по которой голоса в VoteFu хранятся как логические значения, заключается в том, что я чувствовал необходимость поддерживать обратную совместимость с Acts_As_Voteable. Теперь я решил, что слишком много внимания уделяю этой проблеме.
Я собираюсь выпустить новую версию плагина VoteFu, который обрабатывает преобразование для вас, но до тех пор я думаю, что изменить это самостоятельно - разумный шаг. Вот как это сделать:
class VoteFuIntegerMigration < ActiveRecord::Migration
def self.up
add_column :votes, :vote_int, :integer
Vote.find(:all).each do |vote|
vote.vote_int = vote.vote? ? 1 : -1
vote.save!
end
remove_column :vote, :vote
rename_column :vote, :vote_int, :vote
end
end
А потом:
module Juixe
module Acts
module Voteable
module InstanceMethods
def votes_for
Vote.sum(:vote, :conditions => [
"voteable_id = ? AND voteable_type = ? AND vote > 0",
id, self.class.name])
end
def votes_against
Vote.sum(:vote, :conditions => [
"voteable_id = ? AND voteable_type = ? AND vote < 0",
id, self.class.name])
end
def votes_total
Vote.sum(:vote, :conditions => [
"voteable_id = ? AND voteable_type = ?",
id, self.class.name])
end
end
end
end
end
Вероятно, будет хорошей идеей представить изменения модуля в виде обезьяньего патча. В новом приложении VoteFu этот код будет интегрирован (с тестами тоже.)