2017-06-22 54 views
1

我得到了這片被提高線路長度受限碼超過Rubocop進攻:如何重構排着長隊在Ruby中

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 

超過線長,因此解決方案對我來說是不可行的。

所以我作爲一個初學者的問題是我該如何考慮重構這種情況?

+0

什麼簡單BRE將if語句分爲多行? – Severin

+0

Rubocop會產生Guard Clause進攻。 – Lokesh

回答

3

簡單地把if語句分成多行,怎麼樣?

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

然後Rubocop會產生Guard Clause進攻。 – Lokesh

+0

你可以添加你寫的那個引發這種攻擊的確切代碼嗎? – Severin

+0

對不起。它不會引發警衛條款,但我認爲它會。 – Lokesh

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) 
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