我正在尝试为我的评论表单分配进行验证。出于某种原因,我得到的是我的闪存错误被退回给我。它的反应方式(绝对没有输出),我怀疑我没有正确指定事情。
只需要立即创建注释,因此生成带有相应操作的comments_controller;
填写创建操作。它应该创建一个与帖子相关联的新评论以及创建它的current_user;
flash[:error] = "Error saving the comment. Please try again."
_form.html.erb
<%= form_for [topic, post, comment] do |f| %>
<% if comment.errors.any? %>
<div class="alert alert-danger">
<h4>There are <%= pluralize(comment.errors.count, "error") %>.</h4>
<ul>
<% comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="form-inline">
<%= form_group_tag(comment.errors[:body]) do %>
<%= f.label :body %>
<%= f.text_field :body, class: 'form-control'%>
<% end %>
<div class="form-group">
<%= f.submit "Comment", class: 'btn btn-default' %>
</div>
</div>
<% end %>
我指定的form_group_tag中的:body以匹配我的标签/文本字段。
这是我的评论模型,其中:body和:指定了用户
class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :user
# minimum 5 characters and must be signed in
validates :body, length: { minimum: 5 }, presence: true
validates :user, presence: true
end
comments_controller.rb
class CommentsController < ApplicationController
def create
# find topic by id
@topic = Topic.find(params[:topic_id])
# find post id through topic
@post = @topic.posts.find(params[:post_id])
# comments on post
@comments = @post.comments
@comment = current_user.comments.build(params.require(:comment).permit(:body, :post_id))
@comment.post = @post
if @comment.save
flash[:notice] = "Your comment was created."
redirect_to [@topic, @post]
else
flash[:error] = "Error saving the comment. Please try again."
redirect_to [@topic, @post]
end
end
end
如果我按下提交按钮,只会出现闪光错误,与验证无关的任何内容都会返回给我。
答案 0 :(得分:2)
在 comments_controller.rb 中重定向错误,重新加载页面并重置记录。您应该渲染表单视图。
尝试替换
行redirect_to [@topic, @post]
与
render :new
如果@comment.save
失败。 (我假设你正在遵循常规命名。)
修改强>
您可能希望渲染包含“comments / _form”部分的视图。我认为它是“评论/新”,但根据您的评论判断,您可能正在寻找“帖子/节目”。将默认值渲染为当前控制器的视图,但这很容易被覆盖。
render "posts/show"