PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Rails 3.2 - metodo non definito `where' per #

Nella prima riga, stai restituendo correttamente un ActiveRecordRelation oggetto in @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])

A questo punto potresti applicare ulteriore .where(...) metodi, condizioni o ambiti su @alarmsT per costruire ulteriormente l'espressione ARel e i risultati restituiti.

Tuttavia, esegui quindi un filtro su questa relazione, convertendo @alarmsT a un'istanza di 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

Non puoi più creare l'espressione ARel, poiché Array non sa del .where(...) del tuo ARel metodo o uno qualsiasi dei tuoi Alarm ambiti o attributi del modello. Questo è il motivo per cui nel codice seguente ottieni il undefined method 'where' for #<Array:... errore -- stai chiamando .where() su un'istanza di Array; un metodo che non esiste.

@alarmsF = [] 
@header.events.each do |e|
  @alarmsF =  @alarmsF + @alarmsT.where("alarms.location LIKE ?", e.town)
end

Puoi risolvere questo problema non facendo la selezione per filtrare per ID di categoria e utilizzando invece un join. La creazione di un tale join (per verificare l'esistenza di almeno un sottoinsieme di valori in una tabella/colonna correlata) è documentata abbastanza in luoghi facilmente reperibili tramite Google e qui su StackOverflow.