如何在 Ruby 中重构一长行

  • 本文关键字:重构 Ruby ruby rubocop
  • 更新时间 :
  • 英文 :


我得到了这段代码,它提高了行长度限制,超过了Rubocop的罪行:

return organisation_path(current_user.organisation) if current_user.organisation
return session[:previous_url] if session[:previous_url]
return organisation_path(current_user.pending_organisation_id) if current_user.pending_organisation_id
root_path

结束

限制超过倒数第二行。我正在尝试重构这条线来解决 Rubocop 的进攻。

我的第一次尝试是像这样拆分它:

return organisation_path(current_user.pending_organisation_id) if
  current_user.pending_organisation_id

但它看起来不可读。

我的第二次尝试是将这一行分解为一种方法,所以我创建了这个方法:

def pending_organization_path_for_current_user
  return organisation_path(current_user.pending_organisation_id) if current_user.pending_organisation_id
end

但是方法名称又太长了,因此行

 pending_organization_path_for_current_user if current_user.pending_organisation_id

超过线长,因此解决方案对我来说不可行。

所以我作为初学者的问题是我应该如何考虑重构这种情况?

简单地将 if 语句分成多行怎么样?

if current_user.pending_organisation_id
  return organisation_path(current_user.pending_organisation_id)
end
return organisation_path(current_user.organisation) if current_user.organisation
return session[:previous_url] if session[:previous_url]
return root_path unless current_user.pending_organisation_id
organisation_path(current_user.pending_organisation_id)

我假设您不想调整 Rubocop 的设置来更改接受的样式,因此您可以像这样修复它:

if current_user.pending_organisation_id
  organisation_path(current_user.pending_organisation_id)
end

但是,有时更容易接受这是其中之一你比Rubocop更了解的地方,所以只需添加一个例外:

# rubocop:disable Style/WhateverLineLengthIsCalled
return organisation_path(current_user.pending_organisation_id) if current_user.pending_organisation_id
# rubocop:enable Style/WhateverLineLengthIsCalled

最新更新