質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2435閲覧

循環複雑度とやらを下げたい! rails

takeo7

総合スコア18

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/09/15 07:09

###前提・実現したいこと
下記のメソッドで、循環複雑度が高い!とRobocopさんに怒られてしまいます。
が、シンプルにする方法が全く思い浮かばず...
このメソッドをシンプルにする方法ってありますか?
ちなみに、このコードはrailsのcontrollrtに記述してあるものです。
お願いします!

###該当のソースコード

ruby

1 def show 2 @url = request.url 3 @event = Event.find(params[:id]) 4 @num1 = User.where('date1 = 1 and event_id = ' + @event.id.to_s) 5 @num2 = User.where('date2 = 1 and event_id = ' + @event.id.to_s) 6 @num3 = User.where('date3 = 1 and event_id = ' + @event.id.to_s) 7 @num4 = User.where('date4 = 1 and event_id = ' + @event.id.to_s) 8 @num5 = User.where('date5 = 1 and event_id = ' + @event.id.to_s) 9 end

###試したこと
Helperを使ってみたのですが、うまくいかず。
文字列のところはtimesメソッドを使えばいけるともうのですが、変数(@num1, @num2, etc...)をどうすれば良いのかわからず。っていう感じです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Rubocop以前の問題として、SQL断片を文字列で生成するのは、SQLインジェクションの原因となりますので、できるかぎり避けましょう(文字列でやるにしても、プレースホルダを使いましょう)。Railsの場合、単純一致/IS NULLについては、Model.where(col_name: value)という、もっとシンプルな構文で絞り込めますし、こちらは探索する値をエスケープしてくれます。

@event.idによる絞り込みが多いので、そこだけ切り出してみました。

ruby

1def show2 2 @url = request.url 3 @event = Event.find(params[:id]) 4 event_user = User.where(event_id: @event.id) 5 @num1 = event_user.where(date1: 1) 6 @num2 = event_user.where(date2: 1) 7 @num3 = event_user.where(date3: 1) 8 @num4 = event_user.where(date4: 1) 9 @num5 = event_user.where(date5: 1) 10end 11

投稿2016/09/15 07:25

編集2016/09/15 07:38
maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takeo7

2016/09/15 07:48

ご回答ありがとうございます! >SQL断片を文字列で生成するのは、SQLインジェクションの原因となりますので、できるかぎり避けましょう →なるほど。 勉強になります! だいぶスッキリしてRubocopさんにも怒られなくなりました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問