回答編集履歴

2 rowじゃなくてcolumnでした

maisumakun

maisumakun score 123880

2016/09/15 16:37  投稿

Rubocop以前の問題として、SQL断片を文字列で生成するのは、**SQLインジェクション**の原因となりますので、できるかぎり避けましょう(文字列でやるにしても、プレースホルダを使いましょう)。Railsの場合、単純一致/IS NULLについては、`Model.where(row_name: value)`という、もっとシンプルな構文で絞り込めますし、こちらは探索する値をエスケープしてくれます。
Rubocop以前の問題として、SQL断片を文字列で生成するのは、**SQLインジェクション**の原因となりますので、できるかぎり避けましょう(文字列でやるにしても、プレースホルダを使いましょう)。Railsの場合、単純一致/IS NULLについては、`Model.where(col_name: value)`という、もっとシンプルな構文で絞り込めますし、こちらは探索する値をエスケープしてくれます。
`@event.id`による絞り込みが多いので、そこだけ切り出してみました。
```ruby
def show2
 @url = request.url
 @event = Event.find(params[:id])
 event_user = User.where(event_id: @event.id)
 @num1 = event_user.where(date1: 1)
 @num2 = event_user.where(date2: 1)
 @num3 = event_user.where(date3: 1)
 @num4 = event_user.where(date4: 1)
 @num5 = event_user.where(date5: 1)
end
```
1 プレースホルダ

maisumakun

maisumakun score 123880

2016/09/15 16:29  投稿

Rubocop以前の問題として、SQL断片を文字列で生成するのは、**SQLインジェクション**の原因となりますので、できるかぎり避けましょう。Railsの場合、単純一致/IS NULLについては、`Model.where(row_name: value)`という、もっとシンプルな構文で絞り込めますし、こちらは探索する値をエスケープしてくれます。
Rubocop以前の問題として、SQL断片を文字列で生成するのは、**SQLインジェクション**の原因となりますので、できるかぎり避けましょう(文字列でやるにしても、プレースホルダを使いましょう)。Railsの場合、単純一致/IS NULLについては、`Model.where(row_name: value)`という、もっとシンプルな構文で絞り込めますし、こちらは探索する値をエスケープしてくれます。
`@event.id`による絞り込みが多いので、そこだけ切り出してみました。
```ruby
def show2
 @url = request.url
 @event = Event.find(params[:id])
 event_user = User.where(event_id: @event.id)
 @num1 = event_user.where(date1: 1)
 @num2 = event_user.where(date2: 1)
 @num3 = event_user.where(date3: 1)
 @num4 = event_user.where(date4: 1)
 @num5 = event_user.where(date5: 1)
end
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る