sql - string_split - Rieles: Cómo encontrar_por un campo que contiene una cierta cadena
string_split sql (5)
Con PostgreSQL también puede usar operadores de coincidencia :
Topic.where("name ~* ?", @search)
Tengo un modelo llamado Topic, que tiene un nombre como campo.
Entonces di que tengo un término que estoy buscando, apple.
Si hago un
Topic.find_by_name("apple")
Obtengo un registro con el nombre Apple. Eso está bien, pero ¿cómo cambio find_by_name para que pueda encontrar "apple juice" además de "apple", básicamente, encontrar nombres que contengan la consulta original o que coincidan exactamente con la consulta original?
Editar: Gracias por toda la respuesta. Supongo que debería haber sido un poco más claro antes, pero ¿y si quiero encontrarlo por un nombre de variable (obviamente no voy a querer encontrar el nombre "manzana" cada vez :))?
¿Cómo manipulo Topic.where para acomodar esto? Entonces algo así como ...
@topic = Topic.where(......., @name)
Creo que algo como esto debería funcionar:
Topic.where("name like ?", "%apple%")
Para acomodar su edición:
Topic.where("name like ?", "%#{@search}%")
Interpolación de cadenas básica, está usando el valor de @search
dentro de la cadena %%
, por lo que @search = "apple"
luego termina con %apple%
No pongas la cadena directamente así. Se llama inyección SQL. En su lugar, debe usar .where
:
Topic.where("name like ''?%'' ", params[:name])
Parece que en Rails 3 te gustaría usar el lugar donde:
Topic.where("name ILIKE ?", "%apple%")
Tratar
Topic.where("name like ?",''%apple%'')
Topic.find(:all, :conditions => ["name like ?","%apple%"])