我的合作伙伴和我正在开展一个项目,我们非常感谢您的帮助。我们已经在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中的渲染代码之后,我甚至不记得我们做了什么,因为它完全糊涂了,我们的大脑会爆炸。
非常感谢您花时间阅读并帮助我们 - 我们非常接近跳出窗户。
答案 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