2015-08-15 67 views
0

我得到错误,当我退出:的Rails充当可投票检查,如果用户登录到投票

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,当我刷新页面时,它会自动喜欢该项目。即使我清除了数据库,当我进入该项目时,它也会添加一个。

因此,当我尝试注销时,出现该错误,但是当我登录时,没有错误,它似乎正常工作。

回答

1

current_user没有在您的视图中定义,它在控制器中定义。你应该把所有的逻辑控制器

在你的控制器:

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

然后在您的视图:

unless @instance_variable 
+0

哦有趣。好的,这是有效的。谢谢 – hellomello

0

这很奇怪,但我不知道你正在使用的特定宝石。也许你还应该检查current_user是不是nil

喜欢的东西:if current_user && current_user.voted_for?(@project) ...

边注:在风格上,它是最好避免unless ... else,因为它难以阅读。