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