0

我有一个方法定义为运动员,它是用户模型中的创建者,以及定义为默认值为false的运动员的布尔列。切换数据库值

提供者是Twitter或Facebook,如果提供者不是其中的任何一个,那么我希望它只是在下面的方法中将运动员列切换为true。

def athlete? 
    provider.blank? 
    end 

我尝试了多件事情,但没有运气像下面的切换方法没有运气。

def athlete? 
    provider.blank? 
    user.toggle!(:athlete) 
    end 

回答

1

因为我不知道供应商的列类型,我假设它是与“脸谱”可能值的字符串,“推特”和“”。尝试这样的事情,让我知道你会得到什么

def athlete? 
    !provider.any? { |p| %w(facebook twitter).include?(p) } 
end 

这一切确实是检查是否提供包含“推特”或“脸谱”,如果没有,则返回true。

如果您想更新的属性,然后做这样的事情:

def athlete=(athlete) 
    self[:athlete] = !provider.nil? && !provider.any? { |p| %w(facebook twitter).include?(p) } rescue true 
end 
+0

纠正任何的Twitter,Facebook或空白。我想更新属性,所以我尝试了第二种方法,并得到这个错误:'code'undefined method' any?'为零:NilClass – CrazyCoderMonkey 2012-08-04 22:40:02

+0

您是否正在创建新记录?如果是这样,那么“提供者”没有被设置,这就是导致错误的原因。如果发生错误,我会将我的代码块更新为默认值“true”。让我知道你是如何使用代码的,你是在创建一个新的记录?更新?查看? – 2012-08-04 22:47:07

+0

我创建了一条新记录,但默认情况下提供者应该是空白的,运动员列应该是false,如果提供者为空,则设置为true。它的工作现在没有错误,但它不保存对数据库的更改,所以运动员专栏仍然是错误的。谢谢 – CrazyCoderMonkey 2012-08-04 22:56:15