У меня есть модуль:
module Voteable
def has_up_vote_of user
return ! self.votes.select{|v| v.user.id == user.id && v.value == 1}.empty?
end
def has_down_vote_of user
return ! self.votes.select{|v| v.user.id == user.id && v.value == -1}.empty?
end
end
, который смешивается с моделью:
class Comment < ActiveRecord::Base
include Voteable
end
В коде контроллера есть проверка:
has_up_vote = @voteable.has_up_vote_of @user
has_down_vote = @voteable.has_down_vote_of @user
@ voiceable и @user - это существующие элементы модели, найденные в БД.
Предположим, что элемент для голосования имеет право голоса пользователя.После выполнения кода has_up_vote будет равно true, а has_down_vote будет равно nil .
Почему ноль, а не false?
Я использовал несколько вариантов методов, но проблема та же.Даже это дает мне тот же эффект:
def has_up_vote_of user
has = self.votes.select{|v| v.user.id == user.id && v.value == 1}.empty?
return !has.nil? && has
end
Возможно, я что-то неправильно понимаю, но это странное поведение
Обновление
Iзаметил очень странное поведение.
Когда я изменяю методы на тривиальные:
def has_up_vote_of user
return false
end
def has_down_vote_of user
return false
end
Они оба возвращают ноль, когда я отлаживаю приложение.Но из консоли они возвращают false.
Это более странно, потому что я ничего не могу сделать с этими результатами.Этот код не работает:
has_up_vote = false if has_up_vote.nil?
has_down_vote = false if has_down_vote.nil?