我正在尝试实现 AJAX Acts_As_Votable 更新,正如其他一些讨论中所讨论的那样,但由于某种原因,当我发送 AJAX 请求以更新投票计数时,format.js 似乎没有触发。
应该发生的是图像发生变化,但事实并非如此。没有任何变化,页面也没有更新。
不过,投票计数正在运行,如果我刷新页面,我可以看到它,但是 upvote.js.erb 和 downvote.js.erb 文件根本没有运行。所以它在后端工作,应该改变视图的 js 文件似乎没有运行。
我已经尝试了常见的解决方案,比如不渲染布局和更改respond_to 中的顺序,但似乎没有任何效果。
知道有什么问题吗?
这是代码:
控制器动作
def upvote
@list.upvote_by current_user
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
def downvote
@list.downvote_by current_user
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
看法
<div id="upvote" class="like"> <!-- Upvote div! -->
<%= link_to upvote_list_path(@list), method: :put, class: "btn btn-default btn-sm like", remote: true do %>
<div id="upvote-button">
<% if user_signed_in? and current_user.voted_up_on? @list %>
<%= image_tag("upvote-selected.svg") %>
<% else %>
<%= image_tag("upvote-not-selected.svg") %>
<% end %>
</div>
<div id="upvote-count">
<%= rating(@list) %>
</div>
<% end %>
</div>
<div id="downvote" class="dislike"> <!-- Downvote Div -->
<%= link_to downvote_list_path(@list), method: :put, class: "btn btn-default btn-sm dislike", remote: true do %>
<div id="downvote-button">
<% if user_signed_in? and current_user.voted_down_on? @list %>
<%= image_tag("downvote-selected.svg") %>
<% else %>
<%= image_tag("downvote-not-selected.svg") %>
<% end %>
</div>
<% end %>
</div>
</div>
upvote.js.erb(在视图/列表文件夹中)
$('.like').bind('ajax:success', function() {
$('#upvote-button').text(<%= image_tag("upvote-selected.svg") %>);
});
$('.dislike').bind('ajax:success', function() {
$('#downvote-button').text(<%= image_tag("downvote-not-selected.svg") %>);
});
downvote.js.erb
$('.like').bind('ajax:success', function() {
$('#upvote-button').text(<%= image_tag("upvote-not-selected.svg") %>);
});
$('.dislike').bind('ajax:success', function() {
$('#downvote-button').text(<%= image_tag("downvote-selected.svg") %>);
});
任何帮助将不胜感激。谢谢!!