Симона, это не тот ответ, который я ищу (но мне нравится, как ты думаешь; -)
Это побуждает меня прочитать документацию, т.е. исходный код association_proxy.rb
(на самом деле AssociationCollection
, который эмулирует методы Array для коллекции, возвращаемой ассоциацией.)
Глядя на AssociationCollection.include?
File activerecord/lib/active_record/associations/association_collection.rb, line 332
def include?(record)
return false unless record.is_a?(@reflection.klass)
load_target if @reflection.options[:finder_sql] && !loaded?
return @target.include?(record) if loaded?
exists?(record)
end
Похоже, что arg record
ожидается типа @reflection.klass
, тогда как Array.include?
берет объект и использует компаратор ==
, определенный для объектов массива.
Ну, во всяком случае, это не то, что я хотел от AR. Так как Enumerable.member? кажется, работает над коллекцией ассоциаций, я просто буду использовать это. Я хочу просканировать кэшированную коллекцию и больше не попадать в базу данных. Может быть, кто-то мог бы объяснить, как AssociationCollection перераспределяет член?