activerecordでは、firstを使った方が実装とSQLが揃って可読性が上がる
    1579 views
    Post
  
  
Databases on Rails.
RailsのActive Recordには、scopeやdefault_scopeという機能があり、SQLクエリの条件を指定してあらかじめ付けておくことが可能です。
unscopeやunscopedは、これらのscope系で付けた条件を外すことが出来ます。
ただ、注意点として、scope系以外で付けた条件も外してしまいます。
以下に例を示します。
irb(main):001:0> puts User.where(id: 1).all.to_sql
SELECT "users".* FROM "users" WHERE "users"."id" = 1
=> nil
irb(main):002:0> puts User.where(id: 1).unscope(:where).all.to_sql
SELECT "users".* FROM "users"
=> nil
irb(main):003:0> puts User.where(id: 1).unscoped.all.to_sql
SELECT "users".* FROM "users"
=> nil
unscopeやunscopedが、直前のwhere句で指定した条件を外していることが確認できます。
こちらの記事によると、activerecordでlastを使った場合、指定したorderを逆にして"LIMIT 1"とするSQLが発行されるそうです。
一方で、firstを使った場合、指定したorderはそのままで"LIMIT 1"とするSQLとなるので、railsのコードとSQLの対応関係が分かりやすくなります。
したがって、lastよりもfirstを使った方が実装とSQLが揃って可読性が上がるということがこの記事で主張されていました。 ご参考まで。