此代码作为与devise和OmniAuth一起使用的示例提供,它在
my project中有效.
class User < ActiveRecord::Base def self.new_with_session(params,session) super.tap do |user| if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"] user.email = data["email"] if user.email.blank? end end end end
我不知道为什么它是一个单一的等号作为一个双等号,我认为这是if语句所必需的.我的IDE“intelliJ IDEA”同意我的担忧.
解决方法
if语句有效的唯一必要条件是布尔表达式.在这种情况下,因为=返回赋值的结果,实际测试的是会话[“devise.facebook_data”]的虚假性.
IntelliJ对于这样的代码抱怨很有意义,因为如果不了解Ruby的一两件事就难以阅读.建议是将其移至明确的赋值语句中.这具有额外的好处,即对其进行两次干燥.
class User < ActiveRecord::Base def self.new_with_session(params,session) super.tap do |user| data = session["devise.facebook_data"] if data && data["extra"]["raw_info"] user.email = data["email"] if user.email.blank? end end end end