Rails 4 - 从控制器到js.erb文件的传递变量为null

时间:2014-07-27 23:15:23

标签: jquery ruby-on-rails ruby ajax ruby-on-rails-4

我的合作伙伴和我正在开展一个项目,我们非常感谢您的帮助。我们已经在stackoverflow上阅读了很多答案,看过几个railscast等,但仍然无法解决我们的问题。感谢先进的帮助。请你好,我们对rails有点新意见。)

我们为“喜欢”设置了多态关系。用户可以喜欢并且不喜欢' bloc'。在我们的集团指数上,我们列出了所有的集团。在每个bloc的循环中,呈现_like_button partial。这部分代码如下:

_like_button.html.erb

<% if liked?(bloc, current_user) %>
    <%= link_to bloc_like_path(bloc, current_user.id),method: :delete, class: "bloc-unlike", :remote => true do%>
      <i class="fa fa-heart "></i>
    <% end %>
<% else %>
    <%= link_to bloc_likes_path(bloc, @like), method: :post, class: "bloc-like", :remote => true do%>
      <i class="fa fa-heart "></i>
    <% end %>
<% end %>
<span class="right"><%= bloc.likes.count %></span>



我们的索引页面在循环中有以下代码来渲染部分:

index.html.erb

<div id="like" class="bloc-likes">
   <%= render 'likes/like_button', :bloc => bloc %>
</div>



我们的likes_controller有以下代码(这与destroy相似):

likes_controller.rb

def create
     # some stuff here to figure out likes. It works for sure, therefore omitted
     if @like.save
        @bloc = Bloc.find(@like.likeable_id)
        render :toggle, :bloc => @bloc
      end
end



&#39;渲染:切换&#39;在likes_controller中引用包含以下内容的toggle.js.erb文件:

toggle.js.erb

$("#like").html("<%= escape_javascript render ('like_button') %>");



所以,这是问题所在。当我们点击相似内容时,保存就会通过,但是我们遇到了传递&#39; bloc&#39;当它重新加载时回到局部。它需要它来确定if语句是否为真。我们已经尝试过几件事,但它似乎并没有起作用。例如,添加&#39;:bloc =&gt; PARAMS [:集团]&#39;在toggle.js.erb中的渲染代码之后,我甚至不记得我们做了什么,因为它完全糊涂了,我们的大脑会爆炸。

非常感谢您花时间阅读并帮助我们 - 我们非常接近跳出窗户。

2 个答案:

答案 0 :(得分:0)

修复第一个渲染线

render :toggle, locals: {bloc: @bloc}

然后再次传递bloc

$("#like").html("<%= escape_javascript(render 'like_button', locals: {bloc: bloc}) %>");

答案 1 :(得分:0)

尝试使用一些调试器,例如pry。 在您的控制器操作中添加:

def create
  if @like.save
    @bloc = Bloc.find(@like.likeable_id)
    binding.pry
    render :toggle, :bloc => @bloc
  end
end

它会暂停执行并为您提供一个命令提示符,您可以在其中检查变量并执行ruby代码。 还要在模板中添加binding.pry。 更多信息:https://github.com/pry/pry