int配列にdetect
を実行する場合、それは動作します:Rails - 検出方法の実行中にデータベースを使用しないようにするにはどうすればよいですか?
@categories = Category.all
@current_category = @categories.detect{|cat| cat.id == params[:category]}
プログラムの出力
:私はこのような何かをするとき@number = [1,2,3,4,5,6,7].detect{|n| n == 4}
変数@number
は4
なるが、
Category Load (0.2ms) SELECT "categories".* FROM "categories"
これは、データベースを使用して検索することを意味します。
しかし、私が見つけようとしている要素はすでにコレクション@categories
にあります。変数に割り当てることができます。
もちろん、別の解決策は線形検索アルゴリズムを実装することですが、コードを可能な限りきれいに保ちたいだけです。
この検索でデータベースを使用しないようにするにはどうすればよいですか?
EDIT:私は、これが怠惰なフェッチである可能性があることを認識しました。 detect
の前には@categories
を使用していないので、detect
を実行するとクエリが実行されるためです。これは本当ですか?
うん感謝:私は私のモデルにオペレータ
[]
を定義するために愛する場合。しかし、私はそれを使用すると、この "余分なクエリ"が消えて、感謝:) –