![](/img/trans.png)
[英]Rubocop: Assignment Branch Condition size for method is too high. How can I reduce the method?
[英]Refactor the code to reduce Assignment Branch Condition size
我正在开发一个 Rails Web 应用程序。 但是当我运行 rubocop 来检查代码时。 它说下面方法的ABC(分配分支条件)大小太高。 虽然我是 Ruby on Rails 的新手,但有人能给我一些建议来重构这段代码吗? 有关更多详细信息,我正在实施第三方身份验证,允许用户通过 facebook 或 google 等登录。
谢谢
def self.from_omniauth auth, current_user
identity = Identity.find_by(provider: auth.provider, uid: auth.id)
.first_or_initialize
if identity.user.blank?
user = current_user || User.find_by("email = ?",
auth["info"]["email"])
if user.blank?
user = User.new
user.password = Devise.friendly_token[0, 10]
user.name = auth.info.name
user.email = auth.info.email
user.picture = auth.info.image
return user.save(validate: false) if auth.provider == "twitter"
user.save
end
identity.user_id = user.id
identity.save
end
identity.user
end
def self.from_omniauth auth, current_user
identity = Identity.find_by(provider: auth.provider, uid: auth.id)
.first_or_initialize
if identity.user.blank?
user = current_user || User.find_by("email = ?",
auth["info"]["email"])
create_user(auth) if user.blank?
identity.user_id = user.id
identity.save
end
identity.user
end
def self.create_user(auth)
user = User.new
user.password = Devise.friendly_token[0, 10]
user.name = auth.info.name
user.email = auth.info.email
user.picture = auth.info.image
return user.save(validate: false) if auth.provider == "twitter"
user.save
end
是你可以尝试的东西。 但是,如果确实需要复杂性,您可以设置注释以忽略该 cop # rubocop:disable ABC (Assignment Branch Condition)
,或者无论 cop 的实际名称是什么。 如果您觉得尺寸设置太小,您也可以配置 ABC 尺寸
我没有得到您所说的任何错误,所以您可能应该尝试 # rubocop:disable ABC
当我保存它时,它在参数中添加了括号
def self.from_omniauth(auth, current_user)
identity = Identity.find_by(provider: auth.provider, uid: auth.id)
.first_or_initialize
if identity.user.blank?
user = current_user || User.find_by("email = ?",
auth["info"]["email"])
if user.blank?
user = User.new
user.password = Devise.friendly_token[0, 10]
user.name = auth.info.name
user.email = auth.info.email
user.picture = auth.info.image
return user.save(validate: false) if auth.provider == "twitter"
user.save
end
identity.user_id = user.id
identity.save
end
identity.user
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.