Ayuda blog (forms, asociaciones...)

Bueno, antes de nada perdón si el título no es suficientemente
representativo, no se me ocurrió otra cosa.
Pasando a materia. Estoy intentando hacer un pequeño blog para practicar
lo leído en rails, principalmente posts y comentarios, pero sin
scaffold, manualmente.
El caso esque me surgen nada más comenzar algunos errores que no logro
solucionar.

Cuando quiero crear un post, el formulario no trabaja:

New post

<% form_tag :action => ‘createpost’%>

Título :
<%= text_field :form, :title %>

Poster :
<%= text_field :form, :poster %>

Contenido :
<%= text_area :form, :content %>

<%= submit_tag "Crear Post" %> <%=form_tag %>

<%= link_to ‘Back’, :action => ‘index’ %>

Cuando pulso el submit_tag no pasa nada, ni error ni nada, simplemente
como si no le hubiera dado. Las action correspondientes del controlador:

def newpost
@post = Post.new
end

def createpost
@post = Post.new
@post.title = params[:form][:title]
@post.poster = params[:form][:poster]
@post.content = params[:form][:content]
@post.time = Time.now.to_s
if @post.save
flash[:notice] = ‘Post creado correctamente’
redirect_to :action => ‘index’
else
flash[:notice] = ‘Problemas al crear el post’
redirect_to :action => ‘newpost’
end
end

(Exactamente lo mismo pasa con el edit)

Si pruebo desde consola a crear el post, todo funciona correctamente.

Además cuando entro a un post en específico tengo la opción de ver los
comentarios, pero me lanza error: uninitialized constant Post::Comment

Accion responsable:

def showcomments
@post = Post.find(params[:id])
@comments = @post.comments
end

Supongo que es un problema de asociación de modelos, aquí tengo el
modelo de post, con su has_many:

class Post < ActiveRecord::Base
has_many :comments
belongs_to :cathegory
validates_presence_of :title, :poster, :content
end

Muchas Gracias

Protos J. wrote:

Bueno, antes de nada perdón si el título no es suficientemente
representativo, no se me ocurrió otra cosa.
Pasando a materia. Estoy intentando hacer un pequeño blog para practicar
lo leído en rails, principalmente posts y comentarios, pero sin
scaffold, manualmente.
El caso esque me surgen nada más comenzar algunos errores que no logro
solucionar.

Cuando quiero crear un post, el formulario no trabaja:

New post

<% form_tag :action => ‘createpost’%>

Título :
<%= text_field :form, :title %>

Poster :
<%= text_field :form, :poster %>

Contenido :
<%= text_area :form, :content %>

<%= submit_tag "Crear Post" %> <%=form_tag %>

<%= link_to ‘Back’, :action => ‘index’ %>

Cuando pulso el submit_tag no pasa nada, ni error ni nada, simplemente
como si no le hubiera dado. Las action correspondientes del controlador:

def newpost
@post = Post.new
end

def createpost
@post = Post.new
@post.title = params[:form][:title]
@post.poster = params[:form][:poster]
@post.content = params[:form][:content]
@post.time = Time.now.to_s
if @post.save
flash[:notice] = ‘Post creado correctamente’
redirect_to :action => ‘index’
else
flash[:notice] = ‘Problemas al crear el post’
redirect_to :action => ‘newpost’
end
end

(Exactamente lo mismo pasa con el edit)

Si pruebo desde consola a crear el post, todo funciona correctamente.

Además cuando entro a un post en específico tengo la opción de ver los
comentarios, pero me lanza error: uninitialized constant Post::Comment

Accion responsable:

def showcomments
@post = Post.find(params[:id])
@comments = @post.comments
end

Supongo que es un problema de asociación de modelos, aquí tengo el
modelo de post, con su has_many:

class Post < ActiveRecord::Base
has_many :comments
belongs_to :cathegory
validates_presence_of :title, :poster, :content
end

Muchas Gracias
si miras el codigo fuente de la pagina html que te produce el codigo que
pusiste, vas a ver que es erroneo, que los input no estan dentro del
form, etc.

New post

<%=form_tag :action => ‘createpost’ %>

Título :
<%= text_field :form, :title %>

Poster :
<%= text_field :form, :poster %>

Contenido :
<%= text_area :form, :content %>

<%= submit_tag "Crear Post" %>

<%= link_to ‘Back’, :action => ‘index’ %>

saludos :wink:

Dios, odio los pequeños errores!!! Esque no lo veo, me puedes decir que
diferencia hay entre tu formulario (que me funciona, gracias) y el mío,
aparte de que al form_tag inicial le falta un = en <%= form_tag ?

El que me sigue dando problemas es el edit #$%!

Edit post <%= @post.title %>

<%=form_tag :url => {:action => ‘updatepost’, :id => @post.id} %>

Título :
<%= text_field :form, :title %>

Poster :
<%= text_field :form, :poster %>

Contenido :
<%= text_area :form, :content %>

<%= submit_tag "Edit Post" %> <%=form_tag%>

<%= link_to ‘Back’, :action => ‘index’ %>

def editpost
@post = Post.find(params[:id])
end

def updatepost
@post = Post.find(params[:id])
@post.title = params[:form][:title]
@post.poster = params[:form][:poster]
@post.content = params[:form][:content]
@post.time = Time.now.to_s
if @post.save
flash[:notice] = ‘Post editado correctamente’
redirect_to :action => ‘index’
else
flash[:notice] = ‘Problemas al editar el post’
redirect_to :action => ‘editpost’
end
end

Y mirando el código fuente generado creo que el error está en el :url
del form_tag, pero no estoy seguro…:S:

Edit post Editing

Título :

Poster :

Contenido :

Back

AAAaaargh, estas cosas me matan.

Respecto a lo del @post.comments?

Muchísimas gracias Rodrigo :smiley:

Bueno, ya que el form era para un model lo solucioné con el form_for.
Pero cuando intento acceder a los comentarios:

SQLite3::SQLException: no such column: comments.post_id: SELECT * FROM
“comments” WHERE (“comments”.post_id = 18)

Extracted source (around line #7):

4:

Commenter
5: Comment
6:
7: <% for comment in @comments %>
8: <%=h comment.commenter %>
9: <%=h comment.comment %>

El error está en @comments, el action del controlador:

def showcomments
@post = Post.find(params[:id])
@comments = @post.comments
end

Teóricamente debería dejarme acceder a @post.comments, si tengo la
relación has_many establecida no?

class Post < ActiveRecord::Base
has_many :comments
validates_presence_of :title, :poster, :content
end

class Comment < ActiveRecord::Base
belongs_to :post
end

Pues pensaba que era algo de lo que se ocupaba el belongs_to…

gracias

Protos J. wrote:

Bueno, ya que el form era para un model lo solucioné con el form_for.
Pero cuando intento acceder a los comentarios:

SQLite3::SQLException: no such column: comments.post_id: SELECT * FROM
“comments” WHERE (“comments”.post_id = 18)

Se queja de que no tienes la columna post_id. Añadela a tu tabla
comennt.