我按照教程创建了博客应用程序。所以我有帖子和评论。帖子表单中的字段验证工作完美。帖子评论部分中的验证也有效,但我无法打印错误。
评论模型:
课堂评论
归属地:发布
验证 :commenter, :presence => true
结尾
评论控制器:
定义创建
@post = Post.find(params[:post_id])
@comment = @post.comments.build(params[:comment])
如果@comment.save
重定向到 post_path(@post)
别的
渲染:模板 => 'posts/show'
结尾
结尾
销毁
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])
@comment.destroy
渲染:模板 => 'posts/show'
结尾
后控制器:
定义索引
@posts = Post.all
response_to do |格式|
format.html # index.html.erb
format.xml { 渲染:xml => @posts }
结尾
结尾
高清秀
@post = Post.find(params[:id])
@comment = @post.comments.build #已添加
#@comment = @Comment.new #已添加
response_to do |格式|
format.html # show.html.erb
format.xml { 渲染:xml => @post }
结尾
结尾
定义新
@post = Post.new
response_to do |格式|
format.html # new.html.erb
format.xml { 渲染:xml => @post }
结尾
结尾
定义编辑
@post = Post.find(params[:id])
结尾
定义创建
@post = Post.new(params[:post])
response_to do |格式|
如果@post.save
format.html { redirect_to(@post, :notice => '帖子创建成功。') }
format.xml { 渲染 :xml => @post, :status => :created, :location => @post }
别的
format.html { 渲染:动作 =>“新”}
format.xml { 渲染 :xml => @post.errors, :status => :unprocessable_entity }
结尾
结尾
结尾
定义更新
@post = Post.find(params[:id])
response_to do |格式|
如果@post.update_attributes(params[:post])
format.html { redirect_to(@post, :notice => '帖子已成功更新。') }
format.xml { 头:ok }
别的
format.html { 渲染:动作 =>“编辑”}
format.xml { 渲染 :xml => @post.errors, :status => :unprocessable_entity }
结尾
结尾
结尾
销毁
@post = Post.find(params[:id])
@post.destroy
response_to do |格式|
format.html { redirect_to(posts_url) }
format.xml { 头:ok }
结尾
结尾
我以以下形式使用:
<%= form_for([@post, @post.comments.build]) do |f| %>
我如何获得评论的 .errors ?如果我尝试,我总是得到:未定义的方法“错误”或 nil 对象。
请帮忙,我对 Rails 完全陌生。
谢谢!
皮奇
问题是,每次加载表单时,您都在构建新的评论。像这样,带有验证错误的注释永远不会进入您的表单。
改为在您的控制器中创建注释,类似于以下内容 - 详细信息取决于您的应用程序:
# posts controller
def show
@post = Post.find(params[:id])
@comment = Comment.new
end
# comments controller
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(params[:comment])
if @comment.save
redirect_to @post
else
render :new
end
end
Run Code Online (Sandbox Code Playgroud)
并改变你的形式:
<%= form_for([@post, @comment]) do |f| %>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1106 次 |
| 最近记录: |