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

Rails 3.2 - udefineret metode "hvor" for #

I din første linje returnerer du en ActiveRecordRelation objekt i @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])

På dette tidspunkt kan du anvende yderligere .where(...) metoder, betingelser eller omfang på @alarmsT for yderligere at opbygge ARel-udtrykket og resultaterne returneres.

Men du kører derefter et filter over denne relation og konverterer @alarmsT til en forekomst af 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

Du kan ikke længere opbygge ARel-udtrykket, da Array kender ikke til din ARel's .where(...) metode eller en af ​​dine Alarm modellens omfang eller egenskaber. Dette er grunden til, at du i koden nedenfor får den undefined method 'where' for #<Array:... fejl -- du kalder .where() på en forekomst af Array; en metode, der ikke eksisterer.

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

Du kan løse dette ved ikke at vælge at filtrere efter kategori-id'er og i stedet bruge en joinforbindelse. Opbygning af en sådan joinforbindelse (for at bekræfte eksistensen af ​​mindst en delmængde af værdier i en relateret tabel/kolonne) er dokumenteret en del på steder, der nemt kan findes via google og her på StackOverflow.



  1. Overskriver MySQL en kolonne med samme værdi ved opdatering?

  2. Sådan indsætter du flere rækker i den samme tabel - Oracle 10g

  3. PostgreSQL Anonymisering On Demand

  4. Indstilling af `server-id` variabel i MySQL virker ikke