Rails 充当 Votable 检查用户是否登录投票

Rails Acts as Votable check to see if user logs in to vote

我在注销时遇到错误:

undefined method `voted_for?' for nil:NilClass

这是我的观点:

- unless (current_user.voted_for? @project) && (@project.liked_by current_user)
  = link_to like_project_path(@project), method: :put, class: "btn btn-default" do
    %span.glyphicon.glyphicon-heart
      = pluralize(@project.get_likes.size, 'like')
- else 
  = link_to unvote_project_path(@project), method: :put, class: "btn btn-default" do
    %span.glyphicon.glyphicon-heart
      = pluralize(@project.get_likes.size, 'like')

如果我删除 current_user.voted_for? @project 并只留下 @project.liked_by current_user 那么出于某种原因,当我刷新页面时它会自动喜欢该项目。即使我清除了我的数据库,当我进入项目时它也会为它添加一个赞

所以当我尝试注销时,我收到了那个错误,但是当我登录时,没有错误,而且似乎运行正常。

这很奇怪,但我不知道您使用的是哪个 gem。也许您还应该检查 current_user 不是 nil?

类似于:if current_user && current_user.voted_for?(@project) ...

旁注:在文体上,最好避免 unless .. else 因为它很难阅读。

current_user 未在您的视图中定义,它在控制器中定义。您应该将所有逻辑放在控制器中

在你的控制器中:

@instance_variable = (current_user.voted_for? @project) && (@project.liked_by current_user)

那么在你看来:

unless @instance_variable