RoR投票系统。 通过条件投票=真或投票=假计数投票不起作用

我有这些模特

  • 问题
  • 投票

问题has_many投票和投票belongs_to问题。 投票模型具有布尔投票属性。 在问题索引视图中,我想循环查看问题并显示标题,正文,向上投票按钮,向下投票按钮以及显示当前有多少票数和向下投票数的相应标签。 我使用带有issue_id和vote(1或0)的隐藏字段的表单来执行此操作。 问题模型上的方法应该计算投票数。 但我一直得到0回归。 Totalvotes_count有效,但其他两个没有。 在服务器日志中,我看到使用正确的issue_id和投票值创建的投票,但查询由于某种原因不起作用。

问题模型

class Issue  "vote = 1") end def downvotes_count votes.count(:conditions => "vote = 0") end def totalvotes_count votes.count end end 

index.html.erb

  
  • true) do |f| %> issue.id %> 1 %> 'up-vote' %> true) do |f| %> issue.id %> 0 %> 'down-vote' %>
  • 投票控制器

     class VotesController  :issue) end def new @vote = Vote.new(params[:vote]) respond_to do |format| format.html # new.html.erb format.xml { render :xml => @vote } end end def create @vote = Vote.new(params[:vote]) respond_to do |format| if @vote.save format.js format.html { redirect_to issues_path } else format.html { redirect_to issues_path } end end end end 

    问题控制器(部分)

     class IssuesController < ApplicationController # GET /issues # GET /issues.json def index @issues = Issue.all @vote = Vote.new respond_to do |format| format.html # index.html.erb format.json { render json: @issues } end 

    结束

    我相信你的问题是你没有在模型中调用你的方法的“ self ”,但正如tamersalama提到的那样,对于简单的投票跟踪来说这可能是过度的。 在:upvote:downvote属性上编写一个简单的+1方法可能是最简单的。

    vote的默认值是多少? 如果它是NULL – 那么两者都不会起作用。

    更仔细地阅读问题 – 看起来vote的价值决定了它是向上还是向下vote 。 我建议你为Vote使用STI(单表inheritance)机制,你可以在其中创建一个类型列来存储投票类型(upvote,:downvote),以及type属性的索引。

    然而,所有这些似乎都是一种矫枉过正(取决于你的域名的其余部分)。 您可以简单地将投票与每个问题一起缓存。 upvote的列和downvote的列就足够了。 除非你想跟踪投票上的其他属性(比如那些赞成投票的人)。