find(:all)は裏でselect * を発行して、結果のカラム名からオブジェクトのインスタンス変数リストを作るようになっているらしい。 しかも、複数の表をjoinして、表の間でカラムの名前がぶつかると、select *で後に出てくる方の値が、先に出てくる方の値を上書きして思っていたのと違う値がオブジェクトに入っていたりする。 例えば、Userクラスでfind(:all)を使って、user表とtag表をjoinして、両方にnameとかいうカラムがあったりすると、tag表のnameがUser#nameにはいってしまったりして、ハマることになる。 また、必要のないカラムまでデータベースから取ってきて、rubyオブジェクトに格納するのも非効率的だ。 こういうときには、:select => "user.*" とか指定しておくと、意図したとおりの値がオブジェクトに入ってくれる。 しかし、こんなこ
難しいことは分かりやすく、簡単なことは面白く紹介
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く