Ruby、Rails周りのコードレビュー時に先輩に指摘された点メモ
【Rails】Controllerに書く処理か、Modelに書く処理かを考えよう
この処理はModelに書くべきだ、Controllerに書くべきだという指摘が多かった。きちんとMVCの役割を捉えつつ、どこで処理するのが自然でわかりやすいかを考えよう。
【Rails】Enumを使おう
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? }
【Rails】ActiveRecord::Concernをつかうと便利
この辺り参考。
» ActiveSupport::Concern でハッピーなモジュールライフを送る TECHSCORE BLOG
ControllerやModelにActiveRecord::Concernを使ってメソッド定義をしておくとincludeすれば共通的に使えるので便利だったりする。