sql >> Databasteknik >  >> RDS >> PostgreSQL

Rails 3.2 - odefinierad metod `where' för #

På din första rad returnerar du framgångsrikt 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])

Vid det här laget kan du använda ytterligare .where(...) metoder, villkor eller omfattningar på @alarmsT för att ytterligare bygga upp ARel-uttrycket och resultaten returneras.

Men du kör sedan ett filter över denna relation och konverterar @alarmsT till en instans av 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 inte längre bygga upp ARel-uttrycket, eftersom Array känner inte till din ARels .where(...) metod, eller något av dina Alarm modellens omfattning eller attribut. Det är därför du i koden nedan får den undefined method 'where' for #<Array:... error -- du anropar .where() på en instans av Array; en metod som inte finns.

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

Du kan fixa detta genom att inte välja att filtrera efter kategori-ID och istället använda en join. Att bygga en sådan sammanfogning (för att verifiera förekomsten av åtminstone en delmängd av värden i en relaterad tabell/kolumn) dokumenteras en hel del på platser som lätt kan hittas via google och här på StackOverflow.



  1. Hur upptäcker jag en fråga som håller låset i Postgres?

  2. vilken fråga ska vi använda för att dela upp 1colmnn i flera kolumner

  3. MySQL efter infogningsutlösare får automatiskt ökat värde, uppdatera fältvärde efter infogning ger okänt kolumnfel

  4. Beräkna medianen med en dynamisk markör