Forum: Rails-ES Problema con un formulario REST

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
7cc80e366962ecdea03eb1b150f6abf1?d=identicon&s=25 Fernando Val (aaromnido)
on 2009-05-10 14:02
(Received via mailing list)
Hola amigos,

He hecho ya unos cuantos tutos obre REST, me lo he empollado a fondo y
en mi aplición ya lo vengo utilizando sin problemas (me refiero a
algun recurso anidado sobre todo, ya que los demás no tienen mucho
misterio).

El caso es que de repente me he topado con algo que (seguramente los
árboles no me dejan ver el bosque) me está volviendo loco. Os cuento:
Tengo un modelo video anidado a un modelo user tal que
así:Class User:
has_many :videos

Class Video:
belongs_to :user

Routes:
map.resources :users, :has_many => :videos
map.resources :videos
(Mantengo ambas rutas, ya que quiero poder acceder a los vídeos
directamente también ¿Esto es correcto o da problemas?)

Todo me funciuona perfectamente con sus rutas REST, creando, viendo y
eliminando videos. Los vídeos se asignan perfectamente al current_user
al crearse por medio de new, etc...
El problema lo tengo en el edit, que en el formulario de la vista me
está dando un error de ruta. (Creo):
_______________________________________________________________________________________________________

Called id for nil, which would mistakenly be 4 -- if you really wanted
the id of nil, use object_id

La ruta que casca es:
http://localhost:3004/users/7/videos/4/edit

Y el formulario de la vista edit.html.rb:
_______________________________________________________________________________________________________

<% form_for([@current_user, @video], :html => { :multipart => true }) do
|f| %>
  <%= f.error_messages %>
  <table>
    <tr>
      <td><%= f.label :title %>: </td><td><%= f.text_field :title
%></td>
    </tr>
    <tr>
      <td><%= f.label :description %>: </td><td><%= f.text_area
:description %></td>
    </tr>
    <tr>
      <td><%= f.label :video %>: </td><td><%= f.file_field
:uploaded_data %></td>
    </tr>
    <tr><td><%= f.submit 'Submit' %> - <%= link_to 'Back', videos_path
%></td></tr>
  </table>

<% end %>

Es el mismo formulario que en el caso de la vista new me funciona a
las mil maravillas.

¿Sabéis que está pasando? ¿Que hago mal?


Gracias de antemano.


--
Fernando Val
Web Designer
http://www.fernandoval.es
5c15703984caa012845b3cea129da936?d=identicon&s=25 Manuel González Noriega (Guest)
on 2009-05-10 16:22
(Received via mailing list)
2009/5/10 Fernando <aaromnido@gmail.com>

>
> Todo me funciuona perfectamente con sus rutas REST, creando, viendo y
> eliminando videos. Los vídeos se asignan perfectamente al current_user
> al crearse por medio de new, etc...
> El problema lo tengo en el edit, que en el formulario de la vista me
> está dando un error de ruta. (Creo):
>


Haría falta ver qué tienes en el controlador, probablemente no estés
instanciado @video correctamente (o @current_user, pero supongo que
estás
usando una solución de autenticación, y es menos probable)
7cc80e366962ecdea03eb1b150f6abf1?d=identicon&s=25 Fernando Val (aaromnido)
on 2009-05-10 16:42
(Received via mailing list)
Estoy usando Restfull_authenticacion.
Y en el controller tengo esto:
  def edit
  end

  def update
    respond_to do |format|
      if @video.update_attributes(params[:video])
        flash[:notice] = 'Video was successfully updated.'
        format.html { redirect_to user_video_url(@user, @video) }
      else
        format.html { render :action => "edit" }
      end
    end
  end

Pero es que los dejo vacíos (edit y update), y me sigue dando el mismo
error. Creo que el problema esta en el form_for.

¿Alguna pista?


El día 10 de mayo de 2009 16:20, Manuel González Noriega
<manuel.gonzalez.noriega@gmail.com>
escribió:>
>
>



--
Fernando Val
Web Designer
http://www.fernandoval.es
90ea347c45cdfbc1c5767dd6304d9c10?d=identicon&s=25 Borja Martín (Guest)
on 2009-05-10 16:57
(Received via mailing list)
como apuntaba manuel en el correo anterior, el problema lo tienes en el
método edit porque en en ningún momento estás declarando la variable
@video
(ni siquiera con llamando al constructor). debería ser algo así:

def edit
  @video = Video.find(params[:id])
end

saludos

2009/5/10 Fernando <aaromnido@gmail.com>
5c15703984caa012845b3cea129da936?d=identicon&s=25 Manuel González Noriega (Guest)
on 2009-05-10 17:03
(Received via mailing list)
2009/5/10 Borja Martín <borjam@dagi3d.net>

> como apuntaba manuel en el correo anterior, el problema lo tienes en el
> método edit porque en en ningún momento estás declarando la variable @video
> (ni siquiera con llamando al constructor). debería ser algo así:
>
> def edit
>   @video = Video.find(params[:id])
> end
>
> saludos
>


What he said.

De hecho, tampoco estás declarando @video en update, así que te fallará
igual. Podrías hacer un before_filter con el find para ejecutarse antes
de
edit, update, show y cualqueir otra en la que trabajes con un video
concreto
7cc80e366962ecdea03eb1b150f6abf1?d=identicon&s=25 Fernando Val (aaromnido)
on 2009-05-10 17:21
(Received via mailing list)
Muchas gracias amigos,

Efectivamente los bosques no me dejaban ver el árbol... :)

Pffff, la verdad es que es algo tan básico, que no se cómo no lo he
visto. Bueno espero que poco a poco ir puliendo estas cosillas e ir
cogiendo experiencia.

Ahora ha quedao estupendo, recogido en un before filter.



Un saludo y muuuuuchas gracias a los dos.


El día 10 de mayo de 2009 17:02, Manuel González Noriega
<manuel.gonzalez.noriega@gmail.com>
escribió:>>
> http://simplelogica.net + http://www.logicola.net/
>
> _______________________________________________
> Ror-es mailing list
> Ror-es@lists.simplelogica.net
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>
>



--
Fernando Val
Web Designer
http://www.fernandoval.es
This topic is locked and can not be replied to.