Rails Acts as Votable检查用户是否登录进行投票

时间:2015-08-15 02:34:38

标签: ruby-on-rails ruby-on-rails-4 haml

我退出时收到错误:

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,那么由于某些原因,当我刷新页面时,它会自动喜欢该项目。即使我清理了我的数据库,当我进入项目时它也会添加一个类似的数据。

因此,当我尝试注销时,我收到了该错误,但是当我登录时,没有错误,它似乎正常运行。

2 个答案:

答案 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,因为它很难阅读。