PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Rails 3.2 - niezdefiniowana metoda `where' dla #

W pierwszym wierszu pomyślnie zwracasz ActiveRecordRelation obiekt w @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])

W tym momencie możesz zastosować dodatkowe .where(...) metody, warunki lub zakresy na @alarmsT do dalszego budowania wyrażenia ARel i zwracanych wyników.

Jednak następnie uruchamiasz filtr nad tą relacją, konwertując @alarmsT do instancji 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

Nie możesz już budować wyrażenia ARel, ponieważ Array nie wie o .where(...) Twojego ARel'a lub dowolny z Twoich Alarm zakresy lub atrybuty modelu. Dlatego w poniższym kodzie otrzymujesz undefined method 'where' for #<Array:... błąd - wywołujesz .where() na instancji Array; metoda, która nie istnieje.

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

Możesz to naprawić, nie wykonując filtrowania wyboru według identyfikatorów kategorii i zamiast tego używając sprzężenia. Budowanie takiego sprzężenia (aby zweryfikować istnienie przynajmniej podzbioru wartości w powiązanej tabeli/kolumnie) jest dość udokumentowane w miejscach, które można łatwo znaleźć przez google i tutaj na StackOverflow.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres:indeks podobieństwa cosinusowego tablic zmiennoprzecinkowych dla wyszukiwania jeden-do-wielu

  2. Jak połączyć się z docker-compose z hostem PostgreSQL?

  3. Jaka jest różnica między rozmiarem puli połączeń biblioteki ORM / konstruktora zapytań a rozmiarem puli połączeń pgbouncer?

  4. Jak stworzyć użytkownika dla bazy danych w postgresql?

  5. postgres:utwórz tabelę w bazie danych z wiersza poleceń