Ruby on rails 在rails应用程序中实现投票权(或替代方案)

Ruby on rails 在rails应用程序中实现投票权(或替代方案),ruby-on-rails,ruby-on-rails-plugins,voting,Ruby On Rails,Ruby On Rails Plugins,Voting,一段时间以来,我一直在尝试在Rails中实现一个强大的投票系统,但一直在努力。最初我建立了自己的投票系统,但它过于简单 简而言之,它只是使用计数器缓存增加了应答模型中的投票数列。在我发现vote_fu并意识到我的投票系统可以更加强大之前,这对我来说很好。我立即安装了它,整个周末都在拆卸我的应用程序,试图让它正常工作 我在这里发现了一些与这个插件相关的关于堆栈溢出的其他问题,但是没有一个真正提出了最终的解决方案。这是我的密码: 答案\u controller.rb: def vote_up

一段时间以来,我一直在尝试在Rails中实现一个强大的投票系统,但一直在努力。最初我建立了自己的投票系统,但它过于简单

简而言之,它只是使用计数器缓存增加了
应答
模型中的
投票数
列。在我发现vote_fu并意识到我的投票系统可以更加强大之前,这对我来说很好。我立即安装了它,整个周末都在拆卸我的应用程序,试图让它正常工作

我在这里发现了一些与这个插件相关的关于堆栈溢出的其他问题,但是没有一个真正提出了最终的解决方案。这是我的密码:

答案\u controller.rb:

def vote_up
    answer = Answer.find(params[:id])
    current_user.vote_up(answer), :voter_id => current_user.id
    redirect_to :back
end
def create
  @quote = Answer.find(params[:answer_id])

  respond_to do |format|
    if current_user.vote(@answer, params[:vote])
      format.rjs  { render :action => "create", :vote => @vote }
      format.html { redirect_to root_url }
    else
      format.rjs  { render :action => "error" }
      format.html { render :action => "new" }
      format.xml  { render :xml => @vote.errors, :status => :unprocessable_entity }
    end
  end
end
投票权(u controller.rb):

def vote_up
    answer = Answer.find(params[:id])
    current_user.vote_up(answer), :voter_id => current_user.id
    redirect_to :back
end
def create
  @quote = Answer.find(params[:answer_id])

  respond_to do |format|
    if current_user.vote(@answer, params[:vote])
      format.rjs  { render :action => "create", :vote => @vote }
      format.html { redirect_to root_url }
    else
      format.rjs  { render :action => "error" }
      format.html { render :action => "new" }
      format.xml  { render :xml => @vote.errors, :status => :unprocessable_entity }
    end
  end
end
answer.html.erb:(这里有两种不同的方法,它们都不起作用)

我使用的是Rails 2.3.5


有人有什么建议吗?我应该回到我以前的手工投票系统吗?有没有其他我没听说过的投票插件或方法?

我想第一步是通过控制台让它工作。从您评论中的最后一个错误来看,似乎您的模型设置不正确。在您的
用户
型号中,您应该具有以下功能:

#In User.rb
acts_as_voter

#In Answer
acts_as_votable
def vote
  @question = Question.find(params[:id])
  if params[:vote] == 'up'      
    current_user.vote_for(@question)
  elsif params[:vote] == 'down'      
    current_user.vote_against(@question)
  end
  redirect_to @question
end
另外,请确保已将
rake:migrate
应用于数据库,然后在控制台中尝试以下操作:

u = User.first 
a = Answer.last 
u.votes_for(a)
当我在过去使用它时,我会有一个控制器动作,如下所示:

#In User.rb
acts_as_voter

#In Answer
acts_as_votable
def vote
  @question = Question.find(params[:id])
  if params[:vote] == 'up'      
    current_user.vote_for(@question)
  elsif params[:vote] == 'down'      
    current_user.vote_against(@question)
  end
  redirect_to @question
end

jt的回答帮助我让它工作起来。我的控制器没有现成的投票方法。我认为他们应该把它添加到文档中

def vote
    @question = Question.find(params[:id])
    if params[:vote] == 'up'      
      current_user.vote_for(@question)
    elsif params[:vote] == 'down'      
      current_user.vote_against(@question)
    end
    redirect_to @question
  end

投票表决是伟大的。什么特别不起作用?对我来说也很好!这就是为什么我真的想让它工作!看来我的界面链接不起作用了……当我点击时,它根本就没有添加任何投票。此外,在控制台中,当我尝试u=User.first a=Answer.last u.voces_for(a)时,我会得到一个错误,如:“unknown attribute:voter”…我不确定如何更正此错误。