Unas dudillas

Hola, estoy probando ésto, ajax llama al método resultados y resultados
debe pintar el HTML:
En mi template:
<%= text_field_tag :texto %>
<%= observe_field( :texto,
:frequency => 0.25,
:update => “search_hits”,
:with => “texto”,
:url => { :action => :resultados })%>

En mi controlador:

def resultados
live=@params[:texto]
@nombres = Receta.find_by_sql “SELECT * from recetas where titulo
like #{Receta.quote(live)}”
@content ="

"
@nombres.each do |nom|
@content +=""+nom.titulo+""
end
@content +="
"
render_text @content
end
Tengo estas dudas:
1- Llevo un par de horas leyendo ruby nada más, no se si lo que he hecho
es la manera correcta de que Ajax me devuelva el HTML, está bien o hay
otra manera?
2- Otra cosa, me gustaría poder hacer consultas sql, leyendo por ahí he
usado @nombres = Receta.find_by_sql “SELECT * from recetas where titulo
like #{Receta.quote(live)}”, funciona, había probado con:
live=@params[:texto]
@nombres=Receta.find_all[“titulo=?”,live]
pero me da un error diciendo que no se puede convertir una cadena en
entero, alguien puede decirme la forma correcta de formular una query
personalizada y por qué me falla con find_all?

Muchas gracias

Hola,
te dejo los siguiente comentarios
1 - No deberías poner los parámetros dentro del sql, pueden “inyectarte”
código y hacer alguna travesura, tenes que pasar los valores al sql con
variables. seria algo como:

@nombres = Receta.find_by_sql ["select * from recetas where titulo 

like
?", Receta.quote(live)]
Supongo que Receta.quote te devuelve algo que el like del sql
entiende.

Lo que me lleva a proponerte usar:
@nombres = Receta.find(:all, :conditions => [“titulo like ?”,
Receta.quote(live)])
Dejá el find_by_sql para consultas complicadas o para sacarle un poco
mas de
performance.

No deberias armar el contenido de la llamada ajax en el controlador, lo
“ideal” es usar un partial,
creas el archivo _resultados.rhtml y el metodo te quedaria de esta
manera
def resultados
@nombres = …
render partial => ‘resultados’
end

_resultados.rhtml
<% for nombre in @nombres %>
<%= nombre.titulo %>
<% end %>

2- Me parece que quedó contestado…

espero te sirva.
saludos