我退出时收到错误:
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
,那么由于某些原因,当我刷新页面时,它会自动喜欢该项目。即使我清理了我的数据库,当我进入项目时它也会添加一个类似的数据。
因此,当我尝试注销时,我收到了该错误,但是当我登录时,没有错误,它似乎正常运行。
答案 0 :(得分:1)
current_user
未在您的视图中定义,它在控制器中定义。您应该将所有逻辑放在控制器中
在您的控制器中:
@instance_variable = (current_user.voted_for? @project) && (@project.liked_by current_user)
然后在你看来:
unless @instance_variable
答案 1 :(得分:0)
这很奇怪,但我不知道你正在使用的特定宝石。也许您还应该检查current_user
是不是nil
?
类似于:if current_user && current_user.voted_for?(@project)
...
旁注:从风格上来说,最好避免使用unless
.. else
,因为它很难阅读。