読者です 読者をやめる 読者になる 読者になる

リア充爆発日記

You don't even know what ria-ju really is.

ActiveRecordで普段は必要のないカラムをscopeで除いてselectする

これは調べてよかった。

例えばUserモデルがあったとして、特に何もしなければ全カラムの情報がクライアント・サーバ間を行き来するわけですよ。
で、passwordとかのセキュリティに関わりそうなやつは行き来させたくない、と。もしくはトラフィックをムダに食うヤツとか。
まあpasswordはハッシュ化してあるからべつに行き来していいですよ、とか、SSLしてればいいじゃん、いうのもあるかもしれないけど、そういう小学生的な意見はうるせー馬鹿で。

で、そういう場合はscopeがいい。scopeの中でもデフォの挙動を設定するdefault_scopeというのがあってそれを使う。

class User < ActiveRecord::Base
  ~snip~
  default_scope select((column_names - %w(remember_token password_digest)).map { |column_name| "`#{table_name}`.`#{column_name}`"})

こんだけ。"%w(remember_token password_digest)"の部分に普段使わないカラムいれとけばもう出てこない。イェー。
whereとからませて、stateがactiveなやつだけ引っ張る、とかするのにもイイネ!

で、必要なときは別のscopeを定義するか、もしくは以下のごとくscopeをクリアするか

User.unscoped.first


っていうか、scope何なのこれチョー便利。