sql >> Databáze >  >> RDS >> PostgreSQL

Rails 3.2 - nedefinovaná metoda `where' pro #

Na prvním řádku úspěšně vracíte ActiveRecordRelation objekt v @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])

V tomto okamžiku můžete použít další .where(...) metody, podmínky nebo rozsahy na @alarmsT k dalšímu sestavení výrazu Arel a vrácených výsledků.

Poté však spustíte filtr přes tento vztah a převedete @alarmsT do 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

Od Array již nemůžete vytvářet výraz ARel neví o vašem Arel .where(...) nebo jakýkoli váš Alarm rozsahy nebo atributy modelu. To je důvod, proč v níže uvedeném kódu získáváte undefined method 'where' for #<Array:... chyba -- voláte .where() na instanci Array; metoda, která neexistuje.

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

Můžete to opravit tím, že neprovedete výběr filtrování podle ID kategorií a místo toho použijete spojení. Vytvoření takového spojení (pro ověření existence alespoň podmnožiny hodnot v související tabulce/sloupci) je poměrně dost zdokumentováno na místech, která lze snadno najít přes google a zde na StackOverflow.



  1. Dotazování na datové typy XML, které mají atributy uzlu xmlns

  2. java null pointer výjimka Připravený příkaz SQL

  3. Jak rozdělit jeden sloupec na několik sloupců

  4. Pomalý dotaz na information_schema.tables