Relación entre user y post en un blog multiusuario

Hola

Estoy creando un blog multiusuario a partir del plugin restful
authentication y asociando la clase post al usuario. El usuario se logea
correctamente y entonces es cuando quiero acceder a las funciones de
sitios.

Y hasta aquí todo bien. Sin embargo, creo un filtro para cargar el
usuario en el controlador de sitios para poder acceder a sus métodos y
cuando clico sobre el botón de acceso al método me aparece el siguiente
error:

Couldn’t find User without an ID

Pongo a continuación el código del método new de sitios.controller

def new
@sitio = @user.sitios.build

respond_to do |format|
   format.html # new.html.erb
   format.xml  { render :xml => @sitio }

end

No logro entender que está fallando. ¿Alguna sugerencia?

Un saludo y muchas gracias

On Sun, 13 Jul 2008 15:59:04 +0200
Javier S. [email protected] wrote:

error:

Couldn’t find User without an ID
Mira el log, verifica la consulta que está haciendo.
Verifica que la consulta para recuperar el usuario actual, probablemente
en el filtro, sea correcta.

Hoola,

estas haciendo referencia a @user y esta variable no la has iniciado en
ningun momento. deberias de hacer:

@user = current_user (current_user lo dispone el plugin), o bien, si la
variable @user no le vas a sacar provecho como instancia, pues
simplemente
hacer user = current_user o @sitio = current_user.sitios.build

Espero que te sirva,

Saludos

2008/7/13 Javier S. [email protected]:

De hecho, estaba pensando que quizá tenga que ver con el método create,
en lugar del new.

respond_to do |format|
if @post.save
flash[:notice] = ‘El post se ha creado satisfactoriamente.’
format.html { redirect_to(current_user) }
format.xml { render :xml => @post, :status => :created, :location
=> @post }
else
format.html { render :action => “new” }
format.xml { render :xml => @post.errors, :status =>
:unprocessable_entity }
end
end
end

Si os fijáis, la redirección la hago hacia current_user. ¿Es correcto?
Mi idea es que una vez creado el post, el usuario se redirija al show de
ese mismo post.

Saludos

Para redirigir al show del post tienes que hacer format.html {
redirect_to(@post) }

lo que tu has puesto te envia al show del usuario

Faltaría ver el código entero del método create,que debería ser algo así

@post = @user.posts.new(params[:post])

if @post.save

Creo que debes hecharle un vistazo con calma a REST y los recursos
anidados
(nested resources) ya que no tienes my claro como funciona y por
ensayo-error no vas a avanzar mucho y posiblemente pierdas la paciencia.

Te dejo aquí algunos enlaces
http://www.jaimeiniesta.com/2007/12/22/tutorial-recursos-anidados-con-rest-y-rails-2/

http://www.eparreno.com/2008/05/25/recursos-anidados-o-no-en-rest/

saludos

El día 13 de julio de 2008 20:42, Javier S. <
[email protected]> escribió:

Antonio R. wrote:

Hoola,

estas haciendo referencia a @user y esta variable no la has iniciado en
ningun momento. deberias de hacer:

@user = current_user (current_user lo dispone el plugin), o bien, si la
variable @user no le vas a sacar provecho como instancia, pues
simplemente
hacer user = current_user o @sitio = current_user.sitios.build

Espero que te sirva,

Saludos

Hola, no había caído en lo de current_user y así me deja llegar al new
post, pero cuando pincho sobre el submit button me redirige a una
pantalla con un 1 por todo texto (el único usuario que tengo tiene id 1)
y la ruta en la url es

http://localhost:3000/users/1/posts

Pero no me guarda el post en la base de datos.

Vuelvo a estar atascado. :S

Gracias por vuestra ayuda
Un saludo