Saya memiliki array objek, sebut saja itu Indicator
. Saya ingin menjalankan metode kelas Indikator (yang dari def self.subjects
varietas, 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_indicators
metode 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 all
adalah 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
where
setiap waktu. - Saat menjalankan
def self.subjects
metode 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.scoped
seperti 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 ...