sql >> Base de Datos >  >> RDS >> PostgreSQL

Rails 3.2 - método indefinido `where' para #

En su primera línea, está devolviendo con éxito una ActiveRecordRelation objeto en @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])

En este punto, podría aplicar .where(...) adicional métodos, condiciones o alcances en @alarmsT para construir aún más la expresión ARel y los resultados devueltos.

Sin embargo, luego ejecuta un filtro sobre esta relación, convirtiendo @alarmsT a una instancia de 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

Ya no puede construir la expresión ARel, ya que Array no conoce el .where(...) de tu ARel método, o cualquiera de sus Alarm los alcances o atributos del modelo. Esta es la razón por la que en el siguiente código obtienes el undefined method 'where' for #<Array:... error:estás llamando a .where() en una instancia de Array; un método que no existe.

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

Puede solucionar esto al no hacer la selección para filtrar por ID de categoría y, en su lugar, usar una combinación. La creación de una combinación de este tipo (para verificar la existencia de al menos un subconjunto de valores en una tabla/columna relacionada) está bastante documentada en lugares que se encuentran fácilmente a través de Google y aquí en StackOverflow.