[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