我试图让用户无需登录/注册即可对线程进行投票,以提高用户参与度。我该怎么做呢?目前,我目前的流程是将投票与访问者的 IP 地址联系起来,以防止多次投票,但另一个问题是 request.remote_ip 没有为我提供正确的 IP(我在学校网络上)。有什么建议么?非常感谢!
线程 Controller 中的投票操作
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 地址来存储选票,那么也许您可以使用与每个 session 相关联的唯一 ID。这对投票欺诈是开放的,但它允许任何人在没有账户的情况下投票。
你可以做类似的事情
session[:voting_id] ||= create_unique_voting_id
voter = VotingSession.find_or_create_by_unique_voting_id(session[:voting_id])
voter.likes @thread
您需要设置一个 VotingSession 模型来充当 act_as_voter 并维护一个唯一的投票 id,但这应该很容易使用 rails。
希望这可以帮助
关于ruby-on-rails - 如何将行为设置为不需要用户登录的投票?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7987378/