验证注释的长度,但没有错误消息

时间:2011-10-20 18:37:58

标签: ruby-on-rails ruby ruby-on-rails-3

开始我很抱歉我的英语:)

嗯,我实际上是通过一个简单的应用程序,着名的博客来学习Rails。

这是实际的数据库架构:

create_table "comments", :force => true do |t|
t.integer  "post_id"
t.text     "text"
t.datetime "created_at"
t.datetime "updated_at"
end

create_table "posts", :force => true do |t|
t.string   "title"
t.text     "text"
t.datetime "created_at"
t.datetime "updated_at"
end

发布模型:

class Post < ActiveRecord::Base 
    has_many :comments

    validates_presence_of :title, :message => "title is mandatory"
    validates :text, :length => { :minimum => 10 }
end

当我尝试创建一个带有文本&lt; = 10个字符的帖子时,正如预期的那样,它不会保存帖子,并且我收到一条错误消息(默认情况下)。

所以我试着用评论做同样的事情......

评论模型:

class Comment < ActiveRecord::Base
     belongs_to :post
     validates :text, :presence => true, :length => { :minimum => 10 }        
end

我的CommentsController:

 class CommentsController < ApplicationController
  def create
   @post = Post.find(params[:post_id])
   @comment = @post.comments.build(params[:comment])
   @comment.save

   redirect_to @post
  end

  def destroy
   @comment = Comment.find(params[:id])
   @comment.destroy

   redirect_to @comment.post
  end
end

我知道验证已执行,因为我无法使用内容&lt; = 10个字符创建注释,但是我没有按预期收到错误消息。这就是我想要的......

感谢。

1 个答案:

答案 0 :(得分:1)

尝试以下代码:

def create
   @post = Post.find(params[:post_id])
   @comment = @post.comments.build(params[:comment])
   begin
    @comment.save!
     redirect_to @post
    rescue Exception => error
     puts "Error:: #{error.message}"
     render : new #to not redirect
    end

您的错误将被放入您的控制台。

如果您想在View中看到此错误,请将其添加到“新”

<div>
  <% if @comment.errors.any? %>
      <div id="error_explanation">
        <h2>
    <%= pluralize(@comment.errors.count, "error") %> prohibited this comment from being saved:</h2>
        <ul>
          <% @comment.errors.full_messages.each do |msg| %>
              <li><%= msg %></li>
          <% end %>
        </ul>
      </div>
  <% end %>
</div>