В моем приложении, у меня есть линияWeird вещь с выбрать в Rails3
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 (атрибут) сначала выберет все записи и выберет их имена, а затем найдет записи с соответствующими идентификаторами в id_array ,
Если мне нужны имена всего 10 записей, то вышеупомянутый запрос сначала будет извлекать имена всех записей из таблицы, а затем получить мне 10 имен.
Отредактировано: Примечание: Следующий запрос работает отлично:
Model.where(:id => id_array).select(attribute)
Я прочитал эту ссылку раньше, и она говорит, что: «передача параметров hash, содержащих: условия,: include,: join,: limit,: offset,: order,: select,: readonly,: group,: having, : from,: lock для любого из методов класса ActiveRecord, теперь устарел. " –