开始我很抱歉我的英语:)
嗯,我实际上是通过一个简单的应用程序,着名的博客来学习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个字符创建注释,但是我没有按预期收到错误消息。这就是我想要的......
感谢。
答案 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>