将局部变量从控制器传递给呈现局部变量的js.erb的正确方法

时间:2017-05-28 09:19:50

标签: ruby-on-rails ajax

我尝试使用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 %>

0 个答案:

没有答案