私のアプリでは、私はラインを持っています
Feature.all(:select=>"name", :conditions=> ['id IN (?)', feature_id_array]).map(&:name)
そしてそれはうまくいきます。
Rails3構文に書き直したとき、
Feature.find(feature_id_array).select('name').map(&:name)
それは私にエラーを投げます、と言って
ArgumentError in AuthoringController#edit
wrong number of arguments(1 for 0)
app/models/widgets/widget_feature.rb:82:in `select'
それで、私はコンソールでいくつかのランダムなクエリを実行し、それを見つけました:
Model.find(id_array).select(attribute)
同じエラーを返しますが、
Model.select(attribute).find(id_array)
正常に動作します。
誰かがこの理由を教えてもらえますか?私は頭をかいてきましたが、次のような適切な理由に到達しませんでした:
Model.select(attribute)は、最初にすべてのレコードをフェッチしてそれらの名前を選択し、次にid_arrayで一致するIDを持つレコードを検索します。
10レコードだけの名前が必要な場合、上記のクエリは最初にテーブルからすべてのレコードの名前を取得し、次に必要な10個の名前を取得します。
編集済み:注:次のクエリは正常に機能します。
Model.where(:id => id_array).select(attribute)