Saya memiliki array objek, sebut saja itu Indicator. Saya ingin menjalankan metode kelas Indikator (yang dari def self.subjectsvarietas, cakupan, dll) pada larik ini. Satu-satunya cara yang saya tahu untuk menjalankan metode kelas pada sekelompok objek adalah membuatnya menjadi ActiveRecord :: Relation. Jadi saya akhirnya beralih ke to_indicatorsmetode Array.
def to_indicators
# TODO: Make this less terrible.
Indicator.where id: self.pluck(:id)
end
Kadang-kadang saya merangkai beberapa cakupan ini untuk menyaring hasil, dalam metode kelas. Jadi, meskipun saya memanggil metode pada ActiveRecord :: Relation, saya tidak tahu cara mengakses objek itu. Saya hanya bisa mendapatkan isinya melalui all. Tapi alladalah Array. Jadi saya harus mengubah array itu menjadi ActiveRecord :: Relation. Misalnya, ini adalah bagian dari salah satu metode:
all.to_indicators.applicable_for_bank(id).each do |indicator|
total += indicator.residual_risk_for(id)
indicator_count += 1 if indicator.completed_by?(id)
end
Saya kira ini diringkas menjadi dua pertanyaan.
- Bagaimana cara mengubah Array objek menjadi ActiveRecord :: Relation? Lebih disukai tanpa melakukan
wheresetiap waktu. - Saat menjalankan
def self.subjectsmetode tipe pada ActiveRecord :: Relation, bagaimana cara mengakses objek ActiveRecord :: Relation itu sendiri?
Terima kasih. Jika saya perlu mengklarifikasi sesuatu, beri tahu saya.
.all, gunakan saja.scopedseperti yang ditunjukkan oleh jawaban Andrew Marshall (Meskipun di rel 4 itu akan berhasil.all). Jika Anda merasa perlu mengubah array menjadi relasi yang salah di suatu tempat ...