Rails表单验证不起作用,没有输出

时间:2015-05-11 19:13:53

标签: ruby-on-rails validation

我正在尝试为我的评论表单分配进行验证。出于某种原因,我得到的是我的闪存错误被退回给我。它的反应方式(绝对没有输出),我怀疑我没有正确指定事情。

  

只需要立即创建注释,因此生成带有相应操作的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

如果我按下提交按钮,只会出现闪光错误,与验证无关的任何内容都会返回给我。

1 个答案:

答案 0 :(得分:2)

comments_controller.rb 中重定向错误,重新加载页面并重置记录。您应该渲染表单视图。

尝试替换

redirect_to [@topic, @post]

render :new

如果@comment.save失败。 (我假设你正在遵循常规命名。)

修改

您可能希望渲染包含“comments / _form”部分的视图。我认为它是“评论/新”,但根据您的评论判断,您可能正在寻找“帖子/节目”。将默认值渲染为当前控制器的视图,但这很容易被覆盖。

render "posts/show"