目次
なんだこのエラーは
https://github.com/rubocop-hq/rubocop/tree/v0.28.0Assignment Branch Condition size for search is too high. [<10, 21, 5> 23.79/20] Assignment Branch Condition size for search is too high. [<10, 21, 5> 23.79/20]
作業をしていたらこんなエラーが出た。調べてみると、ながいです、幅を取りすぎです、というようなエラーらしい。
RuboCopとは?簡単に
このRubCopはコードを検査してくれるものらしくて、コードが長いとか、インデントが変だとかいろんなことを教えてくれる。勝手に直してくれる(不自然なインデントを修正)ときもあれば、警告文だけだして、自分でどうにかしてくれみたいな時もある。ただ、このRuboCopからの指摘も全てが正しい訳ではないっぽい。
僕がぶつかったエラーに関して
Assignment Branch Condition size for search is too high. [<10, 21, 5> 23.79/20]
指摘を受けたソースコードは↓
def search
if params[:city_id]
pagy, offices = pagy Office.where(city_id: params[:city_id])
pagy_headers_merge(pagy)
elsif params[:keyword]
keywords = params[:keyword].split(/[[:blank:]]+/).select(&:present?)
pagy, offices = pagy_array([])
pagy_headers_merge(pagy)
keywords.each do |keyword|
offices += Office.where('name LIKE (?) OR
address LIKE (?) OR
near_station LIKE (?) OR
introduction LIKE (?) OR
company LIKE (?)',
"%#{keyword}%",
"%#{keyword}%",
"%#{keyword}%",
"%#{keyword}%",
"%#{keyword}%")
end
else
pagy, offices = pagy(Office.all)
pagy_headers_merge(pagy)
end
render json: offices, each_serializer: OfficeIndexSerializer, include: '**'
end
自分でも書いていて長いなとおもった。縦に長い。ただ、そのときの知識ではどうやったコードを簡潔なものにするのか思いつかなかった。誰か教えてください。笑
それで結局どうしたか
.rubocop.ymlでRuboCopの設定を変更した。エラー文を見てみると、、、、
Assignment Branch Condition size for search is too high. [<10, 21, 5> 23.79/20]
[<10, 21, 5> 23.79/20]この部分が、点数を表しているっぽい。これでみると、「MAXスコアが20なのにお前の書いたコードは23.79だよ」っていうことらしく、これをどうにか解消するしかないと考えた。
それで、rubocop.ymlファイルの中のある設定を変更した。
Metrics/AbcSize:
# The ABC size is a calculated magnitude, so this number can be a Fixnum or
# a Float.
Max: 15
このMaxの部分を 25に設定を変更した。そしてコミットすると、RubCopからの指摘を受けずにすんだ。設定変えられるのかー程度に、この記事では感じていただければ、幸いです。
Qiita
@m6mmsfのマイページ - Qiita
記事投稿数: 134 Contribution: 392 フォロワー数: 22
まだまだゴミレベルですがQiitaも書いています。
みなさんがんばりましょう。