0

我试图让用户收藏帖子,然后通过 AJAX 向他们展示某种交互,但它不起作用。

我在控制台中遇到的错误是:

ActionView::Template::Error (undefined local variable or method `post_item' for #<#<Class:0x007fecb2a3d5f8>:0x007fecb2a357e0>):

该按钮正在通过部分呈现:

<%= render "shared/fave_form", post_item: post_item %>

这是按钮的代码 (shared/_fave_form.html.erb):

<% if current_user.voted_on?(Post.find(post_item)) %>
     <%= link_to "unlike", vote_against_post_path(post_item.id), :remote => true, :method => :post, :class => "btn") %>
<% else %>
     <%= link_to "like", vote_up_post_path(post_item.id), :remote => true, :method => :post, :class => "btn") %>
<% end %> 

这是 toggle.js.erb 文件:

 $("#fave").html("<%= escape_javascript render('fave_form') %>");
4

2 回答 2

1

当您使用toggle.js.erb它渲染部分没有得到locals价值post_item时,您还必须提供它。所以,您的 js 代码应该类似于以下内容

$("#fave").html("<%= escape_javascript(render :partial=>"fave_form", locals: {post_item: post_item}).html_safe %>);

我猜您正在使用一些 ajax 调用,然后toggle.js.erb在您的toggle操作中您必须指定值post_item,让我们将其设为实例变量@post_item,以便我们可以在toggle.js.erb.

$("#fave").html("<%= escape_javascript(render :partial=>"fave_form", locals: {post_item: @post_item}).html_safe %>);
于 2013-04-25T05:30:29.553 回答
0

部分使用局部变量,因此post_item作为局部变量传递:

<%= render :partial => "shared/fave_form", :locals => {post_item: post_item} %>
于 2013-04-25T05:09:33.247 回答