В моем приложении есть строка
Feature.all(:select=>"name", :conditions=> ['id IN (?)', feature_id_array]).map(&:name)
и работает нормально.
Когда я переписал его в синтаксис Rails3,
Feature.find(feature_id_array).select('name').map(&:name)
выдает ошибку: 1008 *
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 (атрибут) сначала извлечет все записи и выберет их имена, а затем найдет записи с соответствующими идентификаторами в id_array.
Если мне нужны имена только из 10 записей, то вышеупомянутый запрос сначала извлечет имена всех записей из таблицы, а затем даст мне необходимые 10 имен.
Отредактировано:
ПРИМЕЧАНИЕ: следующий запрос работает нормально:
Model.where(:id => id_array).select(attribute)