Problema con respond_to

Hola,

Estoy intentando utilizar respond_to para servir un contenido
diferente a las peticiones ajax de un controlador tal que
así:
def contacts
@company = Company.find params[:id]

respond_to do |format|
  format.js { render :json => @company.contacts.collect{ |contact|

contact.user }.to_json }
format.html
end
end

No consigo hacerlo funcionar, siempre responde con HTML. He probado a
hacerlo “a la antigua”, comprobando si request.xhr? y funciona bien.
¿Se me escapa algo?


David A., el único desarrollador con una orden de alejamiento de
Jeffrey Zeldman
Simplelogica.net, ahora con un 33,3% más de intromisión en listas de correo

Cuando no hago otra cosa escribo en mildiez.net

David
si no me equivoco respond_to es parte del nuevo sistema RESTful de
rails,
para que funciones deberias generar una ruta:

ActionController::Routing::Routes.draw do |map|
map.resources :employees
end

te recomiendo leer The Rails way http://www.therailsway.com/ estan
hablando de ese tema.

Saludos
Hernán Fernandez
netFlux.com.ar

On 2/21/07, Hernan F. [email protected] wrote:

si no me equivoco respond_to es parte del nuevo sistema RESTful de rails,
para que funciones deberias generar una ruta:

Hola Hernán,

Por lo que he leído en la documentación de respond_to, no es necesario
generar una ruta para utilizarlo, leyendo un poquito más he encontrado
que la respuesta del respond_to va en función de la cabecera http
accept, yo estoy utilizando jquery para hacer las llamadas ajax, he
estado mirando su código y parece que no utiliza esta cabecera (no se
si prototype lo hace).

Aquí [1] hablan un poquito más de este asunto.

Voy a hacer unas pruebas y te digo.

[1] Purchase Intent Data for Enterprise Tech Sales and Marketing | TechTarget

David A., el único desarrollador con una orden de alejamiento de
Jeffrey Zeldman
Simplelogica.net, ahora con un 33,3% más de intromisión en listas de correo

Cuando no hago otra cosa escribo en mildiez.net

On 2/21/07, Hernan F. [email protected] wrote:

Poniéndonos mas interesantes podrías hacer esto( ver el manual del API)

Mime::Type.register “application/json”, :json

Eso es lo que probé y funciona a la super-perfección, no me explico
nada bien :smiley:

Un saludo Hernán.

David A., el único desarrollador con una orden de alejamiento de
Jeffrey Zeldman
Simplelogica.net, ahora con un 33,3% más de intromisión en listas de correo

Cuando no hago otra cosa escribo en mildiez.net

David
muy bueno el tip, para tenerlo en cuenta.
Con respecto a los headers me parece que es mas una cuestión de diseño,
el
header Accept lo que dice es que es lo que se espera como respuesta,
debes
pedir solo lo que entiendes…
Supongo que Prototype envía un Accept multiformato para que te sea mas
facil
entender que pasa si no anda como esperas.

Los templates RJS lo que sirven es código javascript que es evaluado del
lado del cliente.

Poniéndonos mas interesantes podrías hacer esto( ver el manual del API)

Mime::Type.register “application/json”, :json

con eso en environment.rb estás en condiciones de hacer

respond_to :json {…}

Si lo pruebas contanos como te fue. :wink:

Saludos
Hernán Fernandez
netflux.com.ar

Hola

Estoy teniendo el mismo problema que comentáis aquí, pero no consigo
llegar a la solución.

def index
@tracks = @catalog.tracks

respond_to do |format|
    format.html # index.rhtml
    format.js # index.rjs
    format.xml  { render :xml => @tracks.to_xml }
  end
end

end

En mi aplicación puedo servir la información @tracks en diferentes
formatos, pero el problema es que cuando hago una petición ajax a esta
acción siempre me devuelve html. En el directorio tengo los ficheros
index.rhtml y index.rjs. Si borro el fichero index.rhtml las peticiones
ajax funcionan correctamente. No se como indicar de forma explicita que
quiero que la información sea js para ese formato y devuelve la vista
index.rjs

Un saludo y gracias

On 2/21/07, David A. [email protected] wrote:

Voy a hacer unas pruebas y te digo.
[1] Purchase Intent Data for Enterprise Tech Sales and Marketing | TechTarget

Bueno, acabo de hacer la prueba introduciendo la cabecera http accept
en las llamadas ajax que hago desde jquery y funciona perfectamente:

// Esta línea la inserté en jquery, justo antes de enviar la petición xmlhttp:
xml.setRequestHeader(“Accept”, “application/javascript”);

El asunto es que no me parece correcto. Con ese código estoy diciendo
que espero una respuesta con media type application/javascript, cuando
en realidad lo que estoy sirviendo con Rails es json o fragmentos de
html. Creo que se está enfocando un poquito mal: en la versión de
prototype que se sirve con Rails he visto que se envía la cabecera
http accept con esta estructura:

setRequestHeaders: function() {
var headers = {
‘X-Requested-With’: ‘XMLHttpRequest’,
‘X-Prototype-Version’: Prototype.Version,
‘Accept’: ‘text/javascript, text/html, application/xml, text/xml,
/
};

Yo no he utilizado templates RJS y no se si lo que se sirve con esos
templates es un cacho de código javascript, en caso de que no sea así
lo que se debería hacer es cambiar la cabecera Accept en función del
tipo de datos que estemos esperando (normalmente application/xml,
application/json o text/plain para fragmentos html o texto sin
formatear)


David A., el único desarrollador con una orden de alejamiento de
Jeffrey Zeldman
Simplelogica.net, ahora con un 33,3% más de intromisión en listas de correo

Cuando no hago otra cosa escribo en mildiez.net