gpt4 book ai didi

jquery - rails 上的 ruby : vote/unvote using ajax

转载 作者:数据小太阳 更新时间:2023-10-29 09:00:33 25 4
gpt4 key购买 nike

我在我的 ruby​​ 投票系统中使用 acts_as_votable。现在我可以投票/否决并更新计数器。但我想要的是投票,然后投票,然后再次投票,但我只能通过刷新来做到这一点。如果我投票然后反对票,我怎样才能将投票计数器更新为“-1”?

Controller :

  def upvote
@improvement_action.upvote_from current_user #, :vote_scope => 'upvote'
respond_to do |format|
format.json { render json: { count: @improvement_action.get_upvotes.size } }
format.html {redirect_to :back}
end
end

def downvote
@improvement_action.downvote_from current_user#, :vote_scope => 'upvote'

respond_to do |format|
format.json { render json: { count: @improvement_action.get_downvotes.size } }
format.html {redirect_to :back}
end
end

查看:

<%= link_to like_improvement_action_path(improvement_action), class:"btn btn-default stat-item like", method: :put, remote: true, data: { type: :json } do %>
<span class="fa fa-thumbs-up icon" aria-hidden="true"></span>
<span class="like_number"> <%= improvement_action.get_upvotes.size %></span>
<% end %>

<%= link_to unlike_improvement_action_path(improvement_action), class:"btn btn-default stat-item downvote", method: :put, remote: true, data: { type: :json } do %>
<span class="fa fa-thumbs-down icon" aria-hidden="true"></span>
<span class="unlike_number"> <%= improvement_action.get_downvotes.size %></span>
<% end %>

和 application.js:

$(document).ready(function() {

$('.like')
.on('ajax:success', function (e, data, status, xhr) {
$('.like_number').html(data.count)

})
.on('ajax:send', function () {
$(this).addClass('loading');
})
.on('ajax:complete', function () {
$(this).removeClass('loading');
})
.on('ajax:error', function (e, xhr, status, error) {
console.log(status);
console.log(error);
})

$('.downvote')
.on('ajax:success', function (e, data, status, xhr) {

$('.unlike_number').html(data.count);


})
.on('ajax:send', function () {
$(this).addClass('loading');
})
.on('ajax:complete', function () {
$(this).removeClass('loading');
})
.on('ajax:error', function (e, xhr, status, error) {
console.log(status);
console.log(error);
})
});

最佳答案

您可以创建两个文件 upvote.js.erb 和 downvote.js.erb,然后在该文件中添加您希望发生的行为。

js代码:

$(document).ready(function() {

$(document).on('click', '.like', function ( {
$(this).addClass('loading');
});

$(document).on('click', '.downvote' ,function (){
$(this).addClass('loading');
});
});

upvote.js.erb:(文件名要和controller中的方法一样)

$('.like').removeClass('loading');
//updated the below lines in both upvote.js.erb and downvote.js.erb
$('.like_number').html('<%= @improvement_action.get_upvotes.size %>');
$('.unlike_number').html('<%= @improvement_action.get_downvotes.size %>');

downvote.js.erb:

$('.downvote').removeClass('loading');
$('.like_number').html('<%= @improvement_action.get_upvotes.size %>');
$('.unlike_number').html('<%= @improvement_action.get_downvotes.size %>');

关于jquery - rails 上的 ruby : vote/unvote using ajax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com