У нас есть модельная ассоциация, которая выглядит примерно так:
class Example < ActiveRecord::Base
has_many :others, :order => 'others.rank'
end
Столбец ранга является целочисленным типом. Детали этих конкретных моделей не очень важны, поскольку мы обнаружили ту же проблему с другими ассоциациями has_many между другими моделями.
Мы также добавили в модуль Enumerable:
module Enumerable
def method_missing(name)
super unless name.to_s[0..7] == 'collect_'
method = name.to_s[8..-1]
collect{|element| element.send(method)}
end
end
Это добавляет метод collect_id, который мы можем использовать для получения массива идентификаторов записей из массива объектов ActiveRecord.
Так что, если мы используем обычную ActiveRecord find: all, мы получаем хороший массив, который мы можем затем использовать collect_id, но если мы используем Example.others.collect_id, мы получим
NoMethodError: undefined method `collect_id' for #<Class:0x2aaaac0060a0>
Example.others.class возвращает «Массив», так что это ложь или путаница?
Наше решение до сих пор заключалось в том, чтобы использовать его следующим образом:
Example.others.to_a.collect_id
Это работает, но это кажется немного странным. Зачем тебе это делать?
Мы на Ruby 1.8.7 и Rails 2.3.4