2013-04-05 32 views
0

我有積極的記錄信譽系統工作,但我似乎無法隱藏投票按鈕,一旦用戶投票的東西。紅寶石 - 積極的記錄信譽系統(隱藏投票按鈕)

在user.rb

我有一個投票方法

has_many :evaluations, class_name: "RSEvaluation", as: :source 
def voted_for?(review) 
evaluations.where(target_type: review.class, target_id: review.id).present? 
end 

然後在回顧顯示的網頁我有下面的代碼隱藏按鈕,如果「如果」語句計算結果爲真

<% if User.find(session[:user_id]) && 
!User.find(session[:user_id]).voted_for(@review)%> 
<h3> Vote: 
<%= link_to "Up", vote_review_path(@review, type: "up"), method: "post" %> 
|| 
<%= link_to "Down", vote_review_path(@review, type: "down"), method: "post" %></h3> 
<% end %> 

無論按鈕依然顯示。我一直在關注railscast,並且在他們使用current_user的視頻中,但是我使用User.find(session [:user_id])來標識用戶(current_user未定義,我總是得到錯誤「* undefined local variable或方法`CURRENT_USER「*」

+0

您確定投票存儲?你檢查過數據庫嗎? – Mischa 2013-04-05 14:37:54

+0

是的他們似乎在數據庫中,對於rs_evaluation它有12行。 – 2013-04-05 14:45:57

+0

你在target_type中有什麼樣的值? – Mischa 2013-04-05 14:48:14

回答

1

添加到您的application_helper.rb:

def current_user 
    @current_user ||= User.find(session[:user_id]) 
end 

def logged_in? 
    !!current_user 
end 

現在你可以使用你的意見current_userlogged_in?

<% if logged_in? && !current_user.voted_for?(@review)%> 
<h3> Vote: 
<%= link_to "Up", vote_review_path(@review, type: "up"), method: "post" %> 
|| 
<%= link_to "Down", vote_review_path(@review, type: "down"), method: "post" %></h3> 
<% end %> 

def voted_for?(review) 
    evaluations.where(target_type: review.class, target_id: review.id).count > 0 
end 
+0

謝謝,但即使用戶已投票,它仍然顯示按鈕 – 2013-04-05 14:24:45

+0

我編輯了答案,包括對'voted_for?'方法的更改。 – 2013-04-05 14:27:52

+0

嗯投票後仍然顯示 – 2013-04-05 14:32:00

0

如果您的評論類有

has_reputation :votes, source: :user, aggregated_by: :sum 

你可以得到所有評價(信譽記錄)與

object.evaluations 

因此,要確定是否有一些票,通過特定的用戶,你可以使用

class Review 
    def was_vouted_by? user 
     self.evaluations.find_by_source_id(user.id) 
    end 
end 

find_by_source_id - 將返回記錄其中紅寶石評估爲真,或哪個紅寶石評估es轉爲假