sql >> Database >  >> RDS >> PostgreSQL

Rails 3.2 - ongedefinieerde methode `where' voor #

In uw eerste regel retourneert u met succes een ActiveRecordRelation object 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])

Op dit punt zou je extra .where(...) . kunnen toepassen methoden, voorwaarden of scopes op @alarmsT om de ARel-expressie en de geretourneerde resultaten verder op te bouwen.

U voert dan echter een filter uit over deze relatie, waarbij @alarmsT . wordt geconverteerd naar een instantie van 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

U kunt de ARel-expressie niet meer opbouwen, aangezien Array weet niets van uw ARel's .where(...) methode, of een van uw Alarm scopes of attributen van het model. Daarom krijg je in de onderstaande code de undefined method 'where' for #<Array:... fout -- je belt .where() op een instantie van Array; een methode die niet bestaat.

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

U kunt dit oplossen door niet te selecteren om te filteren op categorie-ID's en in plaats daarvan een join te gebruiken. Het bouwen van zo'n join (om het bestaan ​​van ten minste een subset van waarden in een gerelateerde tabel/kolom te verifiëren) is nogal wat gedocumenteerd op plaatsen die gemakkelijk te vinden zijn via Google en hier op StackOverflow.



  1. zorg ervoor dat MySQL-server schrijfrechten heeft in de map \xampp\tmp

  2. Verbindingstijdzone instellen met Spring en DBCP en MySQL

  3. php-server ERR_CONNECTION_REFUSED

  4. Efficiënt converteren van OracleDecimal naar .NET decimaal met afkappen