我试图允许用户无需登录/注册即可对线程进行投票,以提高用户参与度。我该怎么做呢?目前,我当前的流程是将投票与访问者的 IP 地址联系起来,以防止多次投票,但另一个问题是 request.remote_ip 没有为我提供正确的 IP(我在学校网络上)。有什么建议么?非常感谢!
线程控制器中的投票操作
def upvote
@thread = Thread.find(params[:id])
current_user.up_vote(@thread)
flash[:message] = 'Thanks for voting!'
respond_to do |format|
format.html { redirect_to :back }
format.js
end
投票路线
resources :threads do
member do
post :upvote
post :unvote
end
我写的行为作为投票。
这个 gem 背后的整个想法是允许任何东西对任何东西进行投票(因此不存在对用户的硬依赖,就像您所描述的情况一样)。
如果您不想使用 IP 地址来存储投票,那么也许您可以使用与每个会话关联的唯一 ID。这将导致投票欺诈,但它允许任何人在没有账户的情况下投票。
你可以做类似的事情
session[:voting_id] ||= create_unique_voting_id
voter = VotingSession.find_or_create_by_unique_voting_id(session[:voting_id])
voter.likes @thread
您需要设置一个 VotingSession 模型,该模型充当投票者并维护唯一的投票 id,但这应该非常容易使用 Rails。
希望这可以帮助
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)