重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

最近、仕事でRailsを使って仕事をしています。
そこで、疑問点が出てきたので、ちょっとお聞きしたいと思います。

Userというテーブルがあり、それを検索するとします。

User.find(:all, :conditions => '...', :order => '...')
User.new.find(:all, :conditions => '...', :order => '...')

どちらでも同じように検索できるのですが、これはプログラムの内部的にどういう違いがあるのでしょうか?

・上はActiveRecordを使って直接DBを読みに行っている。
・下は一旦オブジェクトとして生成して、そこにActiveRecordでSQLを飛ばしてる。
そんな感じかと漠然と思ってますが、違うのでしょうか?

パフォーマンス的なことも知りたいと思っています。

よろしくお願いします。

A 回答 (1件)

findはクラスメソッドのため、2番目の


User.new.find(:all, :conditions => '...', :order => '...')
の構文はエラーになるはずです。
こちらの環境で、実行したときはエラーになりました。
こちらの実行環境は、windows7で
ruby 1.9.2p180 (2011-02-18) [i386-mingw32]
rails3.0.7です。
findの構文を見た限りでは、rails2.Xのように見受けられますので、
rails2.Xの場合はエラーにならないのかも知れません。
ただ、rails3.Xでは使用できないことは、明らかですので、
今後のrailsのバージョンアップなどを考えると、
この構文は使用しないほうが良いかと思います。
但し、本件は「回答に自信なし」のため、
更に、正確な回答を期待すのであれば、rubyのメーリングリストに参加し、
そこで聞かれるのが確実かと思います。
rubyのメーリングリストへの参加方法は参考URLを参照ください。

参考URL:http://www.ruby-lang.org/ja/community/mailing-li …
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございました。
rails3は、以前のバージョンと比べて大幅に変わってるみたいですね。
仕事なので、既存のプログラムは勝手にいじれませんが、今後はこの検索方法はやめていくように社内でも検討してみます。
機会がありましたら、メーリングリストにも登録してみます。

お礼日時:2011/06/16 15:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!