我尝试使用ajax为注释实现编辑功能。该函数必须加载_form.html.erb partial以编辑用户单击的注释,但我无法弄清楚如何实现所使用的变量。
def edit
@comment = Comment.find(params[:id])
@post = Post.find_by_id(params[:post_id])
respond_to do |format|
format.html {}
format.json { head :no_content }
format.js { render "edit", :locals => {:@comment => Comment.find(params[:id]), :@post => @post} }
end
end
def update
@comment = Comment.find(params[:id])
@post = Post.find_by_id(params[:post_id])
if @comment.update_attributes(comment_params)
respond_to do |format|
format.html {
flash[:notice] = "Successfully updated comment"
redirect_to post_path(@comment)
}
format.json { head :no_content }
format.js
end
else
respond_to do |format|
format.html {flash[:alert] = "Error updating coment"
render :edit
flash[:alert] = "Error updating coment"
render :edit}
format.json { head :no_content }
format.js
end
end
end
以下是我的js文件,编辑和更新:
$('.edit_comment').bind('ajax:success', function() {
$(this).closest('.comment').html("<%= escape_javascript(render partial: 'comments/form', :locals => {:post => @post,:comment => @comment}) %>");});
$('.edit_comment').bind('ajax:success', function() {
$(this).closest('.comment').replaceWith('<%=j render 'comments/comment', post: @post, comment: @comment%>');
});
我在我的控制器和我的js文件中使用的变量一定存在问题,因为当我尝试编辑多个注释而没有刷新时,我总是编辑我点击的第一个。
在我的控制台中,当我点击编辑时会给出正确的注释ID,但是当在实际页面上加载表单时,它总是使用我尝试编辑的第一个注释。
修改
添加我的表单部分:
<%= form_for [post, comment], remote: true do |f| %>
<%= f.text_area :body, placeholder: "Add a Comment" %><br/>
<%= f.submit "Post Comment" %>
<% end %>