2012-06-15 10 views
10

Tengo un modelo de red troncal que intento destruir, pero no se envían parámetros con la solicitud, por lo que el servidor devuelve el error "No se ha encontrado el error 404".red troncal destruir no enviar parámetros

Admitiré que mi estructura es un poco extraña ya que estoy creando/destruyendo los elementos basados ​​en si ya están en una lista o no.

 
var list_item = new MyApp.Models.ListItem({item_id: this.model.id, group_id: this.model.group_id}); 

    if($(e.currentTarget).hasClass('add')){ 

      list_item.save(list_item, { 
       success: function(response){ 
        this.model.attributes.addedtolist_id = response.id 
        console.log(this.model); 
       }, 
       error: function(){ 
        alert('could not save item'); 
       } 
      }); 
    } else if($(e.currentTarget).hasClass('remove')) { 
     list_item.id=this.model.addedtolist_id; 
     list_item.attributes.id = this.model.addedtolist_id; 
     console.log(list_item); 
     list_item.destroy({ 
      success: function(){ 
       alert('delete'); 
      }, 
      error: function(){ 
       alert('could not uncheck'); 
      } 
    }); 
} 

la salida de la consola para list_item antes de destruir es

 
_escapedAttributes: Object 
_previousAttributes: Object 
_setting: false 
attributes: Object 
id: 2 
item_id: 66 
group_id: 64 
__proto__: Object 
cid: "c23" 
id: 2 
__proto__: q 

pero cuando miro las cabeceras enviadas con la solicitud de eliminación, no tengo ningún params están enviando.

----------------------- parámetros de actualización que se envían, 404 aún se devuelven --------------

según la recomendación de Yaroslav, he agregado un 'encabezado' al método de destrucción, pero mi controlador de rieles todavía está devolviendo un error DELETE 404 not found. Solo estoy tratando de devolver el elemento de lista para asegurarme de estar obteniendo el correcto antes de destruirlo.

Mi controlador es

 
def destroy 
    listitem = Listitem.find(params[:id]) 
    return render :json => listitem 
end 
+0

@muistooshort He actualizado el formato y ha añadido la llave de desaparecidos. con suerte eso es mejor – pedalpete

+0

¿De dónde saca su 'id'? No lo veo en el 'nuevo ListItem'. ¿Y cómo se ve la URL para la solicitud DELETE? –

+0

No tiene un id en el 'nuevo ListItem' porque es cuando se está creando el elemento de lista, por lo que aún no tiene un id. Es por eso que creo la identificación antes del 'destruir'. La URL es 'DELETE http://10.1.1.7:3000/list_items 404 (No encontrado)'. Utilizo la misma url para indexar y crear métodos, que funcionan sin problemas. – pedalpete

Respuesta

29

supongo que se está configurando el url en el modelo para una cadena:

Backbone.Model.extend({ 
    url: '/list_items', 
    //... 
}); 

Eso le dirá a Backbone que use exactamente /list_items como URL para todas las acciones. Debe utilizar una función:

url: function() { return '/list_items/' + encodeURIComponent(this.id) } 

o utilizar una cadena con urlRoot y dejar que la función predeterminada url añadir el id:

urlRoot: '/list_items' 
+0

Sí, fue lo urlRoot para mí! – Stumblor

0
list_item.destroy(**l** { 
    success: function(){ 
    alert('delete'); 
}, ...); 

es que el número uno adicional el problema?

+0

oopps, perdón @jakee, cuando no funciona Probé 'list_item.destroy (list_item, {success ...', y dejé el l allí por accidente. Este no es el problema, fue un intento de fix. – pedalpete

2

¿Qué parámetros espera recibir? Destroy solo hace una solicitud de eliminación http por la url sin cuerpo o cualquier encabezado adicional por defecto. El argumento params se pased a la función jQuery Ajax, por lo que no puede especificar cabeceras:

model.destroy({ 
... 
    headers : { 
     your_header : 123 
    } 
}) 
+0

gracias @Yaroslav, esperaba que el id se enviara como un param. He agregado tus 'encabezados', que ahora está enviando el ID como un param, pero sigo obteniendo el 'DELETE' no encontrado – pedalpete

+0

No pude ver estos parámetros del lado del servidor (Rails). No puedo encontrar mucha documentación sobre el parámetro de opciones de backboe destroy. ¿Puedes agregar enlaces? Gracias! – oma

+0

Desafortunadamente eso no se describe en la documentación, se descubrió en el código fuente. – Yaroslav

Cuestiones relacionadas