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”语句评估为真,我有以下代码来隐藏按钮

<% 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'*"

4

2 回答 2

1

添加到您的 application_helper.rb:

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

def logged_in?
  !!current_user
end

现在您可以在您的视图中使用current_user和。logged_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
于 2013-04-05T14:15:28.707 回答
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 - 将返回ruby​​ 评估为 true 的记录,或返回ruby​​ 评估为 false 的记录

于 2013-08-06T17:17:06.537 回答