如何重构Ruby中的长行

时间:2017-06-22 12:22:47

标签: 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

超过了线路长度,因此解决方案对我来说是不可行的。

所以我作为初学者的问题是我应该如何考虑重构这样的案例?

3 个答案:

答案 0 :(得分:3)

如果简单地将if语句分成多行呢?

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

答案 1 :(得分:2)

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)

答案 2 :(得分:0)

我假设你不想调整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