Ruby on rails 切换数据库值

Ruby on rails 切换数据库值,ruby-on-rails,database,ruby-on-rails-3,devise,ruby-on-rails-3.2,Ruby On Rails,Database,Ruby On Rails 3,Devise,Ruby On Rails 3.2,我在用户模型中定义了一个名为Athleter的方法,以及一个定义为Athleter的布尔列,默认值为false 提供者是twitter或facebook,如果提供者不是其中任何一个,并且为空,那么我希望它在下面的方法中将运动员列切换为true def athlete? provider.blank? end 我尝试了多种方法,但没有运气,比如下面的切换方法“没有运气” def athlete? provider.blank? user.toggle!(:athl

我在用户模型中定义了一个名为Athleter的方法,以及一个定义为Athleter的布尔列,默认值为false

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

 def athlete?
    provider.blank?
  end
我尝试了多种方法,但没有运气,比如下面的切换方法“没有运气”

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

因为我不知道提供者的列类型,所以我假设它是一个可能值为“facebook”、“twitter”和“”的字符串。试试这样,让我知道你得到了什么

def athlete?
  !provider.any? { |p| %w(facebook twitter).include?(p) }
end
所有这些只是检查提供者是否包含“twitter”或“facebook”,如果不包含,则返回true

如果要更新属性,请执行以下操作:

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

更正其twitter、facebook或blank。我想更新属性,所以我尝试了第二种方法,但出现了以下错误:
code
nil的未定义方法'any':nilclass您是否正在创建新记录?如果是这样,则未设置“提供者”,这就是导致错误的原因。如果出现错误,我会将代码块更新为默认值“true”。让我知道你是如何使用代码的,你正在创建新记录吗?更新?查看?我正在创建新记录,但默认情况下,提供程序应为空,运动员列应为false,如果提供程序为空,则设置为true。它现在工作时没有错误,但没有将更改保存到数据库中,因此运动员列仍然为false。谢谢现在保存方法(我已经编辑了上面的回复)。请注意
atternate=(atternate)
更改。这将导致运动员记录在保存前被过滤。我还为提供者添加了一个
nil?
检查。现在,如果没有提供提供者,那么运动员将是假的。如果提供的提供者不包含facebook或twitter,则运动员为假。然而,若提供者是给定的,并且包含facebook或twitter,那个么运动员就是真的。希望它对你有用。如果没有提供商,则假设情况正好相反,如果其twitter和facebook将其设置为false,则将其设置为true。我将尝试将其反转并尝试。谢谢