ruby on rails has_many 儿童关系表单验证

pic*_*cki 3 ruby-on-rails

我按照教程创建了博客应用程序。所以我有帖子和评论。帖子表单中的字段验证工作完美。帖子评论部分中的验证也有效,但我无法打印错误。

评论模型:

    课堂评论 
      归属地:发布  
      验证 :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 完全陌生。

谢谢!

皮奇

pol*_*lau 5

问题是,每次加载表单时,您都在构建新的评论。像这样,带有验证错误的注释永远不会进入您的表单。

改为在您的控制器中创建注释,类似于以下内容 - 详细信息取决于您的应用程序:

# 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)