Ruby on rails Rails:对博客评论的验证无效

Ruby on rails Rails:对博客评论的验证无效,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我试图通过创建一个简单的博客来学习Rails。我已经使用AJAX添加了注释,现在我正在尝试验证注释中是否存在名称和主体。但是,验证不起作用。当没有错误时,会像应该的那样添加注释,但当我将“name”或“body”留空并尝试添加注释时,我会被重定向到我试图对其进行注释的帖子的这个奇怪的HTML平面版本(路径如下:/posts/21/comments)。我不明白为什么会发生这种情况,而不仅仅是出现了带有错误信息的帖子页面,我非常感谢任何能够帮助我的人 下面是CommentsController: c

我试图通过创建一个简单的博客来学习Rails。我已经使用AJAX添加了注释,现在我正在尝试验证注释中是否存在名称和主体。但是,验证不起作用。当没有错误时,会像应该的那样添加注释,但当我将“name”或“body”留空并尝试添加注释时,我会被重定向到我试图对其进行注释的帖子的这个奇怪的HTML平面版本(路径如下:/posts/21/comments)。我不明白为什么会发生这种情况,而不仅仅是出现了带有错误信息的帖子页面,我非常感谢任何能够帮助我的人

下面是CommentsController:

class CommentsController < ApplicationController

    def create
        @post = Post.find(params[:post_id])
        @comment = @post.comments.create(comment_params)
        if @comment.errors.any?
            respond_to do |format|
                format.html { render @post }
                format.js
            end
        else
            respond_to do |format|
                format.html { redirect_to @post }
                format.js
            end
        end
    end

    def destroy
        @post = Post.find(params[:post_id])
        @comment = Comment.find(params[:id])
        @comment.destroy

        respond_to do |format|
            format.html { redirect_to @post }
            format.js
        end
    end

    private

    def comment_params
        params.require(:comment).permit(:name, :body)
    end
end

通常我用flash来显示我的错误信息,类似的东西应该可以工作

控制器

respond_to do |format|
 format.html { flash[:notice] = @comment.errors, render @post }
 format.js
end
看法



  • 错误在这一行
    format.html{render@post}
    那一行呈现
    注释。index
    因为它们嵌套在post中,所以您可以得到
    post/:id/comments
    。如果要(从另一个控制器)渲染视图,必须按以下方式执行:

    render template "posts/show"
    
    或者只是

    render "posts/show"
    
    但是渲染视图/模板的问题是,它不会设置所需的任何变量,因此会出现类似
    @variable is nil
    的错误,因此需要设置post/show所需的变量。你可以做的另一件事是
    重定向到@post
    ,但是重定向会刷新页面并删除用户在文本框中键入的内容


    这些是关于渲染/重定向的rails

    这对我来说不起作用,它给出了一个奇怪的语法错误,它仍然让我想知道为什么我自己的“render@post”不只是将我带到“/post/id”
    Rails.application.routes.draw do
      get 'static_pages/aboutme'
      get 'static_pages/photos'
    
      get 'sessions/new'
    
      resources :posts do
        resources :comments, only: [:create, :destroy]
      end
    
      get    'admin'   => 'sessions#new'
      post   'admin'   => 'sessions#create'
      delete 'logout'  => 'sessions#destroy'
    
      get '/overmij' => 'static_pages#aboutme'
      get '/fotos' => 'static_pages#photos'
    
      root 'posts#index'
    end
    
    respond_to do |format|
     format.html { flash[:notice] = @comment.errors, render @post }
     format.js
    end
    
    <%if notice.present? %>
     <div class="alert alert-danger" role="alert">
       <% notice.each do |msg| %>
       <li><%= msg %></li>
      <% end %>
     </div>
    <% end %>
    
    render template "posts/show"
    
    render "posts/show"