gpt4 book ai didi

javascript - Ruby on Rails AJAX 提交表单错误

转载 作者:行者123 更新时间:2023-12-02 15:21:06 25 4
gpt4 key购买 nike

因此,我尝试使用 AJAX 更新我的评论部分,而无需刷新大学项目的整个页面。但是我似乎无法让这个工作。在控制台中它给了我 s

Failed to load resource: the server responded with a status of 500 (Internal Server Error)

我的 show.html.erb 文件:

<h1>Title: <%= @post.title %></h1>
<h2>Body: <%= @post.body %></h2>
<hr />
<h1>Your comments</h1>
<%= link_to "View comments", "#", id: "comments-link" %>
<ol id="comments">
<%= render 'comments' %>
<hr />
<h1>Create comment</h1>

<%= form_for(@comment, :html => {class: "form", role: "forms"}, :url => post_comments_path(@post), remote: true) do |comm| %>
<div class="container">
<div class="input-group input-group-md">
<%= comm.label :body %>
<%= comm.text_area :body, class: "form-control", placeholder: "Enter a comment" %>
</div>
<%= comm.submit "custom", id: "button" %>
</div>
<% end %>
</ol>

我的评论.咖啡:

$(document).on "page:change", ->
$('#comments-link').click ->
$('#comments').fadeToggle()
$('#comments_body').focus()

我的create.js.erb:

$('#comments').append("<%= j render @comment  %>");

和我的评论 Controller :

class CommentsController < ApplicationController

def index

end

def new
end

def new
@comment = Comment.new
end

def create
@comment = Comment.new(comment_params)
@comment.post_id = params[:post_id]
if @comment.save
flash[:success] = "Successfully created comment"
respond_to do |format|
format.html { redirect_to post_path(@comment.post_id) }
format.js
end
else
flash[:danger] = "Failed to create comment"
redirect_to root_path
end
end

private

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

我可能错过了一些文件,所以请告诉我,它是基本的,因为它只是一个帖子和评论系统 - 该项目不需要样式,所以是的。过去 4 个小时我一直在尝试这个,但其他地方就是不起作用。我看过这里,Youtube - 到处都是,但是没有人的代码对我有用,所以我来到了这里!谢谢你的帮助。

编辑:

我注意到它说要在错误响应中创建一个 View ,但是我创建了该 View 并将评论的正文呈现到 create.html.erb 上,但是我现在只需要显示表单。

最佳答案

我注意到您正在发布到 URL post_comments_path(@post)。对于嵌套路由,执行以下操作可能会更清晰:

1)直接发布到嵌套路由:

<%= form_for([@post, @comment], html: {class: "form", role: "forms"}, remote: true)  do |comm| %>

2)确保你的路由在routes.rb中正确嵌套:

resources :posts do
resources :comments
end

3) 重构您的 CommentsController,通过 @post 实例进行构建:

class CommentsController < ApplicationController

before_action :get_post

def index
@comments = @post.comments
end

def new
@comment = @post.comments.build
end

def create
@comment = @post.comments.build(comment_params)

if @comment.save

flash[:success] = "Successfully created comment"

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

else
respond_to do |format|
format.html { render :new }
format.js { render :error }
end
end
end

private

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

def get_post
@post = Post.find(params[:post_id])
end

end

4) 在app/views/comments/error.js.erb中渲染验证错误。我会让您决定如何最好地做到这一点,但这里有一个到控制台的快速转储:

<% @comment.errors.full_messages.each do |message| %>
console.log("<%= message %>");
<% end %>

请勿将此文件与正在处理成功保存评论的 app/views/comments/create.js.erb 混淆。这应该看起来像这样:

$('#comments').append("<%= j render @comment %>"); 
$(".form")[0].reset();

5) 稍微调整一下你的观点。我注意到您需要以不同的方式输出注释:

<ol id="comments">
<%= render @post.comments %>
</ol>

它应该对应于app/views/comments/_comment.html.erb中的部分内容,因此请确保它在那里。

关于javascript - Ruby on Rails AJAX 提交表单错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34046399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com