我在rails上做了一个简单的博客。 我有一个Post模型和一个Comment模型。 当您创建评论时,如果评论无效,我想显示错误。 我该怎么办?
模特邮报:
#/models/post.rb
class Post < ActiveRecord::Base
has_many :comments
validates :title, :content, :presence => true
end
模特评论:
#/models/comment.rb
class Comment < ActiveRecord::Base
belongs_to :post
validates :name, :comment, :presence => true
end
评论控制器
class CommentsController < ApplicationController
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(params[:comment])
redirect_to post_path(@post)
end
end
查看评论表:
<%= form_for([@post, @post.comments.build]) do |f| %>
<% if @comment.errors.any? %>
error!
<% end %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :comment %><br />
<%= f.text_area :comment %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<%= render 'comments/form' %>
如何从控制器CommentController传递@comment来查看/post/show.html.erb?
提前致谢。
答案 0 :(得分:5)
将render "posts/show"
代替redirect_to post_path(@post)
放入CommentsController
。
答案 1 :(得分:2)
和/或者看一下关于嵌套模型和资源的Ryan Bates Screencast:
他们是Rails 2,但想知道它是如何工作的,没关系。
也许对你有意思:
答案 2 :(得分:1)
如果评论无效,则不应重定向到post_path(@post)
。
class CommentsController < ApplicationController
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.new(params[:comment])
if @comment.save
redirect_to post_path(@post), notice: 'Comment was successfully created.'
else
render action: "posts/show", error: 'The comment you typed was invalid.'
end
end
end
并更改/views/comments/_form.html.erb
中的第一个表单行:
<%= form_for([@post, @post.comments.build]) do |f| %>
为:
<%= form_for([@post, (@comment || @post.comments.build)]) do |f| %>
然后,当它无法保存时,您应该看到错误消息。