Я пишу блог-движок, поэтому у меня есть просмотр поста (show.html.erb), который показывает пост, список комментариев и форму комментариев.
Я называю форму следующим образом:
<%= render :partial => 'comments/form', :locals => {:comment => @post.comments.new} %>
Я не уверен, правильно ли передается комментарий, но по крайней мере я получаю post_id для нового комментария.
Это моя форма (_form.html.erb при просмотре комментариев):
<%= form_for comment, :action => "create" do |f| %>
<% if comment.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(comment.errors.count, "error") %> prohibited this comment from being added:</h2>
<ul>
<% comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.hidden_field :post_id %>
<p>
<%= f.label :name %>
<%= f.text_field :name %>
</p>
<p>
<%= f.label :email %>
<%= f.text_field :email %>
</p>
<p>
<%= f.label :url %>
<%= f.text_field :url %>
</p>
<p>
<%= f.label :content %>
<%= f.text_area :content %>
</p>
<p class="no-border">
<%= f.submit "Post", :class => "button" %>
</p>
<% end %>
И это действие:
def create
@comment = Comment.new(params[:comment])
respond_to do |format|
if @comment.save
format.html { redirect_to :back }
else
format.html { redirect_to :back }
end
end
end
Немного многословно, но я хочу добавить больше материала.
Я могу добавлять комментарии отлично, но я могу 'я не вижу ошибок проверки.
Я оставляю все пустыми (в моей модели есть средства проверки) и вижу, что комментарий, созданный в действии create , содержит ошибки и перехожу к else path.
Но ... Форма не показывает ошибок.
Я думаю, что у меня есть объект с ошибками, но когда я перенаправляю назад, объект, который я передаюк форме снова новый и не имеет ошибок.
Итак, в чем проблема?
РЕДАКТИРОВАТЬ: Дополнительные вещи:
Я мой show.html.erb У меня также есть это (перед формой):
<ol class="commentlist">
<%= render @post.comments %>
</ol>
Итак, когда в действии show я помещаю дополнительную переменную:
def show
@post = Post.find(params[:id])
@comment = @post.comments.new
Похоже, что рендер тоже хочет сделать пустой комментарий и сделать исключение.
Как это обойти?