@previous_vote
кажется нулевым в начале каждого запроса?
Я бы лично покончил со всей логикой в контроллере и поставил бы ограничения уникальности на уровне модели или базы данных, где они принадлежат.
Обновлено
Возможно, в нем много ошибок, но он рассматривается как псевдокод
Модели что-то вроде:
class Video < ActiveRecord::Base
has_many :votes
end
class Vote < ActiveRecord::Base
belongs_to :user
belongs_to :video
validates_uniqueness_of :user_id, :scope => :video_id # only one vote per person per video
end
class User < ActiveRecord::Base
has_many :votes
end
Контроллер:
def create
@video = Video.find(params[:video_id])
@vote = current_user.votes.find_or_create_by_video_id(@video.id)
# change this next block of code so you assign value to the vote based on whatever logic you need
if you_need_to_do_anything_to_change_its_value
@vote.value = :whatever
end
if @vote.save
redirect_to @video
else
render :whatever_is_appropriate
end
end