gpt4 book ai didi

javascript - Rails ajax 从集合中追加单个项目

转载 作者:行者123 更新时间:2023-12-01 05:48:21 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个评论系统,它将评论显示为集合,并且我已经使用ajax评论工作,但目前它再次呈现整个集合,但我想要的只是 append 最新的评论。这是我的代码:

comments_controller.rb

class CommentsController < ApplicationController

before_filter :authenticate_member!
before_filter :load_commentable
before_filter :find_member

def index
redirect_to root_path
end

def new
@comment = @commentable.comments.new
end

def create
@comment = @commentable.comments.new(params[:comment])
@comment.member = current_member
respond_to do |format|
if @comment.save
format.html { redirect_to :back }
format.json
format.js
else
format.html { redirect_to :back }
format.json
format.js
end
end
end

def destroy
@comment = Comment.find(params[:id])
respond_to do |format|
if @comment.member == current_member || @commentable.member == current_member
@comment.destroy
format.html { redirect_to :back }
else
format.html { redirect_to :back, alert: 'You can\'t delete this comment.' }
end
end
end

private

def load_commentable
klass = [Status, Medium, Project, Event, Listing].detect { |c| params["#{c.name.underscore}_id"] }
@commentable = klass.find(params["#{klass.name.underscore}_id"])
end

def find_member
@member = Member.find_by_user_name(params[:user_name])
end

end

statuses_controller

def show
@status = Status.find(params[:id])
@commentable = @status
@comments = @commentable.comments.order('created_at desc').page(params[:page]).per_page(15)
@comment = Comment.new
respond_to do |format|
format.html # show.html.erb
format.json { redirect_to profile_path(current_member) }
format.js
end
end

statuses/show.html.erb

<% if member_signed_in? %>
<div id="comm_form_wrap">
<%= render "shared/comment_form" %>
</div>

<div id="comments_<%= @commentable.id %>">
<%= render partial: "shared/comments", :collection => @comments, :as => :comment %>
</div>
<% end %>

shared/_comments.html.erb

<div id="comment_<%= comment.commentable.id %>_<%= comment.id %>" class="comments">
<span class="comment_av">
<%= comment_avatar_link_2 comment.member, :class => "com_av", title: comment.member.full_name, alt: comment.member.full_name %>
</span>
<span>

<div class="comment_name">
<% if comment.member == @commentable.member %>
<%= link_to comment.member.user_name, profile_path(comment.member) %> <span class="owner">Creator</span>
<% else %>
<%= link_to comment.member.user_name, profile_path(comment.member) %>
<% end %>

<% if comment.member == current_member || @commentable.member == current_member %>
<span class="comment_del">
<%= link_to image_tag("Delete.png", title: 'Delete'), [@commentable, comment], remote: true, method: :delete, data: { confirm: 'Are you sure?' } %>
</span>
<% end %>
<span class="meta">
<%= time_ago_in_words(comment.created_at) %>
</span>
</div>

<div class="com_con">
<%= Rinku.auto_link(comment.content).html_safe %>
</div>
</span>
</div>

comments/create.js.erb

$("#comments_<%= @commentable.id %>").html("<%= escape_javascript(render :partial => 'shared/comments', :collection => @comments, :as => :comment) %>");
$('#comment_form')[0].reset();

如果我只是在 create.js.erb 文件中将 html 更改为 append ,它将 append 整个评论集合。我想我可以从我的注释部分复制并粘贴代码,但这会是很多代码,而且我不知道如何以这种方式定义变量。对我来说 append 单个新评论的最佳方式是什么?提前致谢。

最佳答案

我能够解决这个问题。我可以像这样 append @comment 而不是渲染或 append 集合:

$("#comments_<%= @commentable.id %>").append("<%= escape_javascript(render :partial => @comment, :locals => {:comment => @comment}) %>");

然后我只需要在我的评论文件夹中创建一个 _comment.html.erb 部分。

关于javascript - Rails ajax 从集合中追加单个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24663610/

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