Di baris pertama, Anda berhasil mengembalikan ActiveRecordRelation
objek di @alarmsT
# Extracts those alarms that are ACTIVE and have something in common with the tittles
@alarmsT = Alarm.activated.where("keyword in (?)", [@header.title_es, @header.title_en, @header.title_en])
Pada titik ini Anda dapat menerapkan .where(...)
tambahan additional metode, kondisi, atau cakupan di @alarmsT
untuk lebih membangun ekspresi ARel dan hasilnya kembali.
Namun, Anda kemudian menjalankan filter pada relasi ini, mengonversi @alarmsT
ke instance Array
# Extracts alarms when Header has at least the same categories as an alarm
@alarmsT = @alarmsT.select do |alarm|
@header.category_ids.all?{|c| alarm.category_ids.include? c }
end
Anda tidak dapat lagi membangun ekspresi ARel, karena Array
tidak tahu tentang .where(...)
ARel Anda metode, atau salah satu Alarm
. Anda cakupan atau atribut model. Inilah sebabnya mengapa dalam kode di bawah ini Anda mendapatkan undefined method 'where' for #<Array:...
kesalahan -- Anda memanggil .where()
pada instance Array
; metode yang tidak ada.
@alarmsF = []
@header.events.each do |e|
@alarmsF = @alarmsF + @alarmsT.where("alarms.location LIKE ?", e.town)
end
Anda dapat memperbaikinya dengan tidak melakukan pilih untuk memfilter berdasarkan id kategori dan sebagai gantinya menggunakan gabungan. Membangun gabungan semacam itu (untuk memverifikasi keberadaan setidaknya subset nilai dalam tabel/kolom terkait) didokumentasikan cukup banyak di tempat-tempat yang mudah ditemukan melalui google dan di sini di StackOverflow.