У меня есть сообщение, которое has_many :comments
и комментарий, belongs_to :post
.В / posts /: id (метод post show) Я отображаю форму, где пользователи могут оставлять комментарии.
Все работает, проверки, тесты и публикация в порядке.Единственное, чего не хватает, это как повторно отобразить POST-данные об ошибках валидации .
(упрощенный) код для этого:
#app/controllers/posts_controller.rb
class PostsController < ApplicationController
def index
@posts = Post.all_published(params[:page])
@title = "Blog"
end
def show
@post = Post.where({:published => true}).find(params[:id])
@comment = Comment.new(:post => @post)
@title = @post.title
end
end
#app/controllers/comments_controller.rb
class CommentsController < ApplicationController
def create
@comment = Comment.new(params[:comment])
puts @comment
if @comment.save
flash[:notice] = 'Comment was successfully created.'
redirect_to(@comment.post)
else
flash[:notice] = "Error creating comment: #{@comment.errors}"
redirect_to(@comment.post)
end
end
end
#app/views/posts/show.haml
.html renders Post contents.
- form_for @comment do |f|
= f.hidden_field :post_id
= f.text_area :body
= f.text_field :name
.some more fields.
Я ожидаю, что решение будет либо в каком-то магическом объявлении в comments_controller.rb, часть
else
flash[:notice] = "Error creating comment: #{@comment.errors}"
redirect_to(@comment.post)
end
Или в PostsController.show
, где я готовлю @comment
.Должен ли я установить условие @comment и заполнить его некоторой магической переменной при ошибках?Или я совершил совершенно другую ошибку?