ben ActiveRecord çocuk nesneler topluluğu içeren bir nesne, yaniYakut tipleri
class Foo < ActiveRecord::Base
has_many :bars, ...
end
var ve bu koleksiyon karşı Dizisinin find
yöntemini çalıştırmayı denerseniz:
foo_instance.bars.find { ... }
Alıyorum:
ActiveRecord::RecordNotFound: Couldn't find Bar without an ID
Bunun nedeni, ActiveRecord'un'yı kaçırmasıdır Kendi amaçları içinyöntemi. Şimdi detect
kullanabilirim ve her şey yolunda. Ancak kendi curiousity tatmin etmek, açıkça bir koşuya find
yöntemi geri çalmaya metaprogramming kullanmayı denedi:
unbound_method = [].method('find').unbind
unbound_method.bind(foo_instance.bars).call { ... }
ve bu hatayı alıyorsunuz:
TypeError: bind argument must be an instance of Array
çok net Yakut düşünmüyor
foo_instance.bars.instance_of?(Array) -> true
herkes metaprogramm ile etrafında almak için bu ve bir bakıma bir açıklama ile bana yardımcı olabilir
:foo_instance.bars
henüz Dizi ve olduğu ing?
, .all yöntem aslında dernek türüne göre çok büyük bir hafıza etkisi olabilir tüm ilişkili modelleri alır. Örneğin, User has_many: posts ise, kullanıcının tüm yayınlama geçmişini alıyor olabilirsiniz. Bu, önemli miktarda veri olabilir. Mümkün olduğunda, daha iyi performans için koşullarla veya adlandırılmış kapsamlarla bir arama çağrısı oluşturmaya çalışın. – tadman