ruby-on-rails - tutorial - ruby postgresql
¿Cómo implemento una búsqueda avanzada con operadores con pg_search? (1)
Implementé PgSearch en mi modelo de Node
así:
include PgSearch
pg_search_scope :node_search, against: [:name, :user_id, :circa],
using: { tsearch: { any_word: true} },
:associated_against => {
comments: [:message],
user: [:first_name, :last_name, :email],
memberships: [:relation]
}
Y en mi controlador tengo esto:
if params[:search]
@nodes = Node.node_search(params[:search])
end
Idealmente, lo que me gustaría poder hacer, sin embargo, es que alguien pueda escribir en la representación de texto (una bandera) de una de las asociaciones y tener el filtro de búsqueda solo en esa bandera.
Por ejemplo, decir: "nombre: Bouncing Ball", donde la búsqueda tendría lugar solo en la columna denominada name
en el modelo de nodes
. Aka ... buscaría todos los nodos con el nombre Bouncing Ball
y no buscaría otras columnas o modelos, ni siquiera ninguna de las asociaciones.
Naturalmente, me gustaría poder hacer búsquedas como: owner: John Brown
(que busca todos los nodos cuyo propietario / usuario first_name y last_name son John Brown), comment: Manhattan
(que busca todos los nodos que tienen un comentario con el textee Manhattan
en la copia, y así sucesivamente.
¿Cómo logro esto con PgSearch?
¿Ha intentado utilizar una combinación de " ámbitos de búsqueda dinámica " con algún procesamiento de controlador de la cadena de búsqueda?
name: Bob
, analizar las columnas / relación y el valor de búsqueda luego pasarlo a un pg_search_scope con un bloque lambda?