【发布时间】:2015-07-19 05:35:51
【问题描述】:
所以我的助手类中有一个如下所示的链接/按钮:
link_to "UnFav", unfavorite_node_path(node), class: "btn btn-success favorite", method: :post, remote: true, data: { toggle_text: 'Fav', toggle_href: favorite_node_path(node), id: node.id }
在我的控制器中调用这些方法:
def favorite
@node.liked_by current_user
if request.xhr?
render json: { count: @node.get_likes.size, id: params[:id] }
else
redirect_to @node
end
end
def unfavorite
@node.unliked_by current_user
if request.xhr?
render json: { count: @node.get_likes.size, id: params[:id] }
else
redirect_to @node
end
end
我正在使用acts-as-votable。
在我看来,我会像这样显示特定 node 的投票数:
<span class="card-favorite-count">
<i class="icon-heart"></i> <%= node.cached_votes_total %>
</span>
理想情况下,我想要发生的是,当按下其中一个链接并成功执行操作时,我想更新已在 DOM 中显示的计数。
我尝试创建一个favorite.js.erb 并将其放入其中:
$(".card-favorite-count").html('<%= node.cached_votes_total %>');
但我意识到,当我收藏和取消收藏某个项目时,在我的服务器日志中它从未调用过 favorite.js.erb 模板 - 所以它永远不会被执行。
我也在寻找关于 gem 的回调,但我找不到。
解决这个问题的最佳方法是什么?
【问题讨论】:
-
实际上你正在渲染
json而不是js,这就是为什么你的js.erb没有被调用 -
好点。如果我从
JSON更改为JS,我是否需要更改我的表单或其他任何东西? -
您是否在任何地方使用
json值? -
既然你提到了,我不这么认为。
-
然后尝试答案代码,否则我认为您知道
js请求,因此您知道那里需要做什么。因此,您可以检查是否有任何问题可以更改。
标签: javascript jquery ruby-on-rails ruby-on-rails-4 ujs