1

我在帖子模型中嵌入了一个评论模型:

class Post
  include Mongoid::Document
  field :name, :type => String
  field :content, :type => String
  embeds_many :comments
end

class Comment
  include Mongoid::Document
  field :content, :type => String
  validates_presence_of :content
  embedded_in :post, :inverse_of => :comments 
end

正如预期的那样,评论表包含在帖子/节目中:

p#notice = notice

h2= @post.name
p= @post.content

a.btn href=edit_post_path(@post) Edit

h3 New comment
= simple_form_for [@post, Comment.new] do |f|
  = f.error_notification
  = f.input :content, :as => :text
  = f.button :submit

在我的评论控制器中:

def create
  @post = Post.find(params[:post_id])  
  @comment = @post.comments.build(params[:comment])

  respond_to do |format|
    if @comment.save
      format.html { redirect_to @post, notice: 'Comment created.' }
    else
      format.html { render :template => "posts/show" }
    end
  end
end

这似乎适用于有效评论,但对于空白评论有两个问题。首先,没有显示验证消息。其次,空白评论在 post/show 模板中呈现,因为它在调用@comment = @post.comments.build(params[:comment]).

关于这个主题的 railscast 使用@post.comments.create!(params[:comment])而不是 build,但这会导致我认为不合适的任何验证失败的异常。

我可以通过重新获取帖子来解决第二个问题,但这似乎很笨拙:

def create
  @post = Post.find(params[:post_id])  
  @comment = @post.comments.build(params[:comment])

  respond_to do |format|
    if @comment.save
      format.html { redirect_to @post, notice: 'Comment created.' }
    else
      @post = Post.find(params[:post_id])  
      format.html { render :template => "posts/show" }
    end
  end
end

即便如此,验证仍然缺失。

有人对如何做得更好有建议吗?

4

0 回答 0