我有一个模块:奇怪零对象结果
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
@voteable和@user是现有模型项目,可在数据库中找到。
假设,可供投票的项目有用户的赞成票。在执行代码之后,has_up_vote将等于true,并且has_down_vote将为零。
为什么零,而不是假?
我已经使用了几种方法的变体,但问题是一样的。即使这给了我同样的效果:
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
Posssible,我误解的东西,但这种行为很奇怪
更新
我发现很奇怪的行为。
当我改变方法简单:
def has_up_vote_of user
return false
end
def has_down_vote_of user
return false
end
他们都返回nil,当我调试应用程序。 但是,从控制台,他们返回false。
这更为直观,因为我对这些结果无能为力。这些代码是不工作:
has_up_vote = false if has_up_vote.nil?
has_down_vote = false if has_down_vote.nil?
你得到的'self.votes.map {什么| V | [v.user.id,v.value]}'? – 2011-02-24 13:21:56
我得到相同的结果(has_down_vote为零) – AntonAL 2011-02-24 13:30:19
我要求你把'puts'语句,而不是替代'select'。 – 2011-02-24 13:32:07