Problema con un formulario REST


#1

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 %>

<%= f.label :title %>: <%= f.text_field :title %>
<%= f.label :description %>: <%= f.text_area :description %>
<%= f.label :video %>: <%= f.file_field :uploaded_data %>
<%= f.submit 'Submit' %> - <%= link_to 'Back', videos_path %>

<% 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 V.
Web Designer
http://www.fernandoval.es


#2

2009/5/10 Fernando removed_email_address@domain.invalid

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)


#3

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
removed_email_address@domain.invalid
escribió:>


Fernando V.
Web Designer
http://www.fernandoval.es


#4

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 removed_email_address@domain.invalid


#5

2009/5/10 Borja Martín removed_email_address@domain.invalid

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


#6

Muchas gracias amigos,

Efectivamente los bosques no me dejaban ver el árbol… :slight_smile:

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
removed_email_address@domain.invalid
escribió:>>

http://simplelogica.net + http://www.logicola.net/


Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es


Fernando V.
Web Designer
http://www.fernandoval.es