在我的应用程序中,我有这条线
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)