[Ror-es] Al refrescar se repite la acción
Rafa Cano
rafa.cano at gmail.com
Sun Oct 28 18:55:10 GMT 2007
La página del listado sí pide confirmación tras pulsar F5. Lo que me extraña
es eso, que la url de la página no es la misma que ejecutó la acción de
añadir.
De todas formas lo que hago ahora es detectar que el elemento no está ya
agregado, pero aun así no debería dispararse la acción.
Voy a tratar de resumirte el proceso que sigo:
del listado de objetos obj2 del objeto obj1 con id 1
/myapp/obj1/obj2list/1
voy a
/myapp/obj1/obj2toadd/1
que muestra lalista de objetos obj2 para agregar al obj1. Selecciono y
agrego por post.
def addobj2
obj2ids=params[:obj2]
obj1id=params['id']
if obj1id.nil?
#error
else
@obj1=Obj1.find(obj1id)
end
#comprobar que los ids son nuestros
obj2list=....find(:all, :conditions=>['id IN (?)', obj2ids.collect{...}])
#me quedo solo con los mios
obj2ids=obj2list.collect {|e| e.id }
#en realidad no haría falta transaction
Obj2.transaction do
obj2ids.each do |id|
obj2=...find(:first, :conditions=>['obj2_id=?', id])
if obj2.nil?
obj2=Obj2.new
...
obj2.save!
end
end
end
redirect_to :action=>'obj2list', :id=>@obj1.id.to_s
end
he probado el 303 y no ha funcionado
On 10/28/07, Raul Murciano <raul at murciano.net> wrote:
>
>
> Hola Rafa,
>
> (Doy por hecho que en al pulsar F5 el navegador no te pide confirmación
> para enviar de nuevo los datos: en ese caso la repetición de la acción
> sería normal y para evitarla habría que ver el caso en detalle).
>
> Las acciones que añaden/modifican/eliminan datos nunca deberían
> activarse mediante peticiones tipo GET (el tipo de petición que harías
> al pulsar un enlace normal y corriente): de hacerlo tanto los refrescos
> con F5 como las visitas de los robots de los buscadores alterarán tus
> datos.
>
> Si sigues el convenio REST no tendrás este problema, en caso contrario
> puedes comprobar si la petición recibida es GET o no usando request.get ?
>
> No sé si esto te resuelve la duda, si acaso pega el código conflictivo
> en algún sitio para que podamos ayudarte más fácilmente.
>
>
> > obj_a.lista_bs.find(:all, :conditions...)
> >
> > se supone que find busca solo entre la lista de elementos de b ¿cierto?
>
> No sé a qué te refieres con "la lista de elementos de b", así que cambio
> el ejemplo:
>
> rafa.friends.find(:all, :conditions...)
>
> busca solamente entre los amigos de rafa aquellos que cumplen las
> condiciones indicadas.
>
> --
> Raul Murciano - Freelance Web Developer
> http://raul.murciano.net
> _______________________________________________
> Ror-es mailing list
> Ror-es at lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.simplelogica.net/pipermail/ror-es/attachments/20071028/d5805937/attachment-0001.htm
More information about the Ror-es
mailing list