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的列就足够了。 除非你想跟踪投票上的其他属性(比如那些赞成投票的人)。