簡體   English   中英

RoR投票系統。 按條件選票計數選票=真或選票=假不起作用

[英]RoR voting system. Counting votes by condition vote = true or vote = false not working

我有這些模特

  • 問題
  • 投票

發出has_many票,並投票屬居。 投票模型具有布爾投票屬性。 在問題索引視圖中,我想循環瀏覽問題,並顯示標題,正文,向上投票按鈕,向下投票按鈕,以及分別顯示當前有多少向上和向下投票的標簽。 我使用帶有issue_id和表決(1或0)隱藏字段的表單來執行此操作。 發行模型的方法應該計算票數。 但是我一直得到0返回。 Totalvotes_count有效,而其他兩個無效。 在服務器日志中,我看到使用正確的issue_id和vote值創建的表決,但是由於某些原因查詢不起作用。

問題模型

class Issue < ActiveRecord::Base
attr_accessible :body, :end_at, :title
validates_presence_of :title, :body, :end_at
has_many :votes

def upvotes_count
    votes.count(:conditions => "vote = 1")
end

def downvotes_count
    votes.count(:conditions => "vote = 0")
end

def totalvotes_count
    votes.count
end

end

index.html.erb

<% @issues.each do |issue| %>
<li>
    <div class="issue">
        <h2><%= issue.title %></h2>
        <p><%= issue.body %></p>

        <%= form_for(@vote, :remote => true) do |f| %>
        <%= f.hidden_field "issue_id", :value => issue.id %>
        <%= f.hidden_field "vote", :value => 1 %>
        <%= submit_tag issue.upvotes_count.to_s + " Up", :class => 'up-vote' %>
        <% end %>

        <%= form_for(@vote, :remote => true) do |f| %>
        <%= f.hidden_field "issue_id", :value => issue.id %>
        <%= f.hidden_field "vote", :value => 0 %>
       <%= submit_tag issue.downvotes_count.to_s + " Down", :class => 'down-vote' %>
        <% end %>

    </div>
</li>
<% end %>

投票控制人

class VotesController < ApplicationController

  def index
    @votes = Vote.find(:all, :include => :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(單表繼承)機制,在其中創建一個類型列以存儲投票類型(:upvote,:downvote),並在type屬性上建立索引。

但是,所有這一切似乎都不過分(取決於您域的其余部分)。 您只需將投票連同每個問題一起進行緩存。 一列贊成票和一票贊成票就足夠了。 除非您想跟蹤Vote上的其他屬性(例如,喜歡投票的人)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM