[ネーミング]Railsのscopeはアンダースコアはじまりで書くとすっきりすると思う


コーディング規約とかサンプルアプリとかWebでいろいろ見ても、どこにもそんなこと書いてないオレオレ規約だけど、
scopeは scope :_active, -> { where(active:true) } みたいに書いたらすっきりすると思う。

rails-style-guide README-jaJA.md at master · satour rails-style-guide · GitHub

を見ると、こういう風に書けばいいよとあるけど

user.rb
class User < ActiveRecord::Base
  scope :active, -> { where(active: true) }
  scope :inactive, -> { where(active: false) }

  scope :with_orders, -> { joins(:orders).select('distinct(users.id)') }
end

アンダースコアではじめて

user.rb
class User < ActiveRecord::Base
  scope :_active, -> { where(active: true) }
  scope :_inactive, -> { where(active: false) }

  scope :_with_orders, -> { joins(:orders).select('distinct(users.id)') }
end

こうするとなにがうれしいかというと、
メソッドチェーンで書いてもレシーバが変わってないのがひと目で分かる。

Modelにはメソッドもあれば、belongs_toやhas_manyなどのアソシエーションもあり、いまselfが何を指してるか注意しないといけない。

User.active.with_orders
より
User._active._with_orders
のが断然わかりやすいと思うんだがどうだろうか?