2014-01-25 63 views
0

我接近Ruby on Rails的新手(但喜歡它),我無法管理過濾acuratelly。act_as_votable rails計算特定用戶的答案投票

Mi的目標是檢索由一個用戶創建的答案上的所有投票。而我使用act_as_votable_gem

在answer.rb我:

class Answer < ActiveRecord::Base 
    acts_as_votable  
    belongs_to :user 
    belongs_to :letter 
    ... 
end 

在user.rb我:

class User < ActiveRecord::Base 
    acts_as_voter 
    has_many :answers, dependent: :destroy 
    ... 
end 

在users_controller.rb談到的伎倆,因爲我有信形式用戶show動作:

def show 
    @user = User.find(params[:id]) 
    @letter = Letter.new(params[:letter]) 
    @letters = @user.letters.all 
    @answers = @user.answers 
    ... 
    @emitedupvotes = @user.votes.up.count 
    @emiteddownvotes = @user.votes.down.count 
    @totalemitedvotes = @emitedupvotes + @emiteddownvotes 
    @receivedupvotes = ???????? 
    @receiveddownvotes = ??????? 
    ... 
end 

我已經tryed:

a)(recomended one)@receivedupvotes = @ answer.votes.up.count但這需要@answer = Answer.find(params [:id]),我有=>「ActiveRecord :: RecordNotFound at/users/1找不到應答,id = 1「

或者,如果我這樣做:Answer.find(params [:answer_id])=>」無法找到答案沒有ID「。

B)(最合乎邏輯的)@receivedupvotes = @ answers.votes.up.count => 「未定義的方法`票的零:NilClass」

C)(瘋狂的一個)@receivedupvotes = @answers .user.votes.up.count =>「undefined method`user'」

d)@receivedupvotes = @ answers.votes.up.where(「voter = @user」)。count =>「未定義的方法`投票'爲零:NilClass「。

所以,我tryed連接(以前從未做過):

E)@receivedupvotes = @ answers.joins(:票).votes.up.count =>「未定義的方法'票的... 「

F)@receivedupvotes = @ answers.joins(:票).up.count => 」爲......「

任何幫助未定義的方法'了」?謝謝。

回答

0

我不知道你是否仍然停留在這一點,但如果是這樣..

得到什麼投票?看起來像Answer得到了投票。

如果用戶has_many:answers,那麼這意味着@ user.answers會返回一個Answer對象數組。然而,從你的觀點來看,b)看起來@answers是零的,所以你必須深入研究,找出原因。

因此獲得@ user.answers返回一個實際的答案數組而不是零是你的第一步。

一旦你到達那裏,@ answers.votes將不起作用,因爲@answers又是一個數組。每個答案都有投票,所以你可以在答案的實例上調用投票,而不是在數組上。

回到您的主要目標,即統計用戶收到的所有選票。由於用戶沒有得到表決,但答案沒有得到表決,所以您需要爲每個用戶的答案統計所有選票。

這裏有一種方法:

@receivedupvotes = 0 
@receiveddownvotes = 0 
@user.answers.each do |answer| 
    @receivedupvotes = @receivedupvotes + answer.votes.up 
    @receiveddownvotes = @receiveddownvotes + answer.votes.down 
end 

此外,你應該使用下劃線在變量名,像@received_up_votes。這是Ruby的推薦方式,更具可讀性。

0

Jeff。非常感謝你。它現在正在工作,因爲它應該。

這是給別人看的答案:

@ user.answers工作,因爲它應該。

的,這是與act_as_votable用戶解答計票的工作實現:

@user_answers_received_upvotes = 0 
@user_answers_received_downvotes = 0 
@user.answers.each do |answer| 
    @user_answers_received_upvotes = @user_answers_received_upvotes + answer.votes.up.size 
    @user_answers_received_downvotes = @user_answers_received_downvotes + answer.votes.down.size 
end   
@user_answers_total_received_votes = @user_answers_received_upvotes + @user_answers_received_downvotes 

我會給予好評你的答案時,我可以。

再次感謝。