Ruby、Rails周りのコードレビュー時に先輩に指摘された点メモ

Rails】Controllerに書く処理か、Modelに書く処理かを考えよう

この処理はModelに書くべきだ、Controllerに書くべきだという指摘が多かった。きちんとMVCの役割を捉えつつ、どこで処理するのが自然でわかりやすいかを考えよう。

RailsEnumを使おう

enum hoge: %i(foo bar baz)のように書けば、テーブルのhogeカラムの値(0, 1, 2)と対応しRails内ではfoo bar bazとして扱えるので数値を使うよりも意味合いを捉えやすい。この辺りが非常に参考になる。

いまさらながらRails4.1から導入されたEnumが便利なのでまとめてみた - Rails Webook

Ruby】コメントはやっていることではなく背景を書こう

ちょっとこれはRubyに特化したものではないが、コード内のコメントはやっていることではなくて、なぜその処理が必要なのかや根拠などを記載する方がよい。例えば、

# 完了に更新
State.complete!

と書いてもそれはコードを見ればわかることなので、

# ここで完了に更新することで○○画面で非表示になる
State.complete!

のようになぜこの処理をする必要があるのかなどを書くほうがよい。逆にそれ以外の場合はコメント書かなくて良いのでコード量を減らせる。

Ruby=は左辺に右辺を代入しつつ右辺の値が返る

irb(main):001:0> hoge = 1
=> 1

なので、

hoge = 1
if hoge
  puts hoge   # => 1
end

if hoge = 1
  puts hoge   # => 1
end

と書けるよということ。

Rails】Modelのscopeを活用しよう

Modelにscopeをで検索処理を書くとデフォルトで全レコードが返るので、条件が指定された時のみ絞るということができる。 参考:http://qiita.com/ishidamakot/items/7afa6630eee3f95513a6

scope :name_like, -> name {
  where('name like ?', "%#{name}%") if name.present?
}

RailsActiveRecord::Concernをつかうと便利

この辺り参考。

» ActiveSupport::Concern でハッピーなモジュールライフを送る TECHSCORE BLOG

ControllerやModelにActiveRecord::Concernを使ってメソッド定義をしておくとincludeすれば共通的に使えるので便利だったりする。