震災後くらいからいじり初めて、Rails3の案件を一つやって、今はRails3.1の案件が進行中。

何と言ってもArel最高。Perl/DBIの頃作ろうとしてうまくできなかったものが実現されている感じ。
オブジェクト志向にどっぷり浸かっている時にSQLで突然手続き志向に戻されるのが嫌だったんだよね。
極力SQL書かないようにしてやってるけど、NOT INとか!=とか否定が入るとどうしてもSQLの断片を書かなくちゃならないのが不満ではあります。


以下、よくハマるところ。

scopeを使って

scope :recent, where("created_at > ?", 1.day.ago)

とかやりたくなるんだけどこれは罠。scopeは生成された時点で評価されるので、production環境だと起動時の1日前になってしまう。
lambdaを使って

scope :recent, lambda { where("created_at > ?", 1.day.ago) }

が正解。

あとdefault_scopeはよく考えてから使った方がいい。
明示的に外さない限り外れないので、むしろ「うっかりロードしたらまずいデータの排除(論理削除とか)」に使うのが正解な気がする。軽い気持ちでorderとか付けておくとfirstとlastがごっちゃになってわけ分からなくなる。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>