acts_as_votable
是一个 Rails gem,用于实现投票功能,例如点赞、踩等。它允许你在模型之间建立投票关系,并提供了相应的方法来处理投票逻辑。
acts_as_votable
主要支持两种类型的投票:
适用于需要实现投票功能的网站和应用,如社交媒体、论坛、博客等。
在使用 acts_as_votable
时,如果你希望通过 AJAX 来实现投票功能,从而避免页面重载,可以按照以下步骤进行:
acts_as_votable
gem 到你的 Gemfilegem 'acts-as-votable'
然后运行 bundle install
。
acts_as_votable
class Post < ApplicationRecord
acts_as_votable
end
class User < ApplicationRecord
acts_as_voter
end
class VotesController < ApplicationController
def upvote
@post = Post.find(params[:id])
@post.upvote_by(current_user)
render json: { count: @post.get_upvotes.size }
end
def downvote
@post = Post.find(params[:id])
@post.downvote_by(current_user)
render json: { count: @post.get_downvotes.size }
end
end
resources :posts do
member do
post 'upvote'
post 'downvote'
end
end
<%= link_to 'Upvote', upvote_post_path(@post), method: :post, remote: true, data: { type: :json } %>
<%= link_to 'Downvote', downvote_post_path(@post), method: :post, remote: true, data: { type: :json } %>
<span id="vote-count"><%= @post.get_upvotes.size %></span>
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('[data-type="json"]').forEach(function(link) {
link.addEventListener('ajax:success', function(event) {
var data = event.detail[0];
document.getElementById('vote-count').textContent = data.count;
});
});
});
原因:可能是由于路由配置错误或 JavaScript 代码问题。
解决方法:
原因:可能是由于 JSON 数据格式不正确或 JavaScript 处理逻辑错误。
解决方法:
原因:可能是由于表单提交导致的页面重载。
解决方法:
remote: true
选项来启用 AJAX 提交。method: :post
。通过以上步骤,你可以实现使用 AJAX 来投票,并避免页面重载。
领取专属 10元无门槛券
手把手带您无忧上云