Pundit抛出未定义的方法`user'

时间:2016-02-01 11:15:41

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

我无法将Project模型视图限制为拥有用户。无法想出这个:

错误:

undefined method `user' for #<Project::ActiveRecord_Relation:0x007f94b25dd010>

project_policy.rb

class ProjectPolicy < ApplicationPolicy
  def show?
    user.present? && user == record.user
  end
end

项目控制器

class ProjectsController < ApplicationController

  def show
    @project = Project.find(params[:id])
    @pages = @project.pages
    authorize @projects
  end

如果我删除user == record.user一切正常

application_policy文件是默认的

项目属于用户 用户有很多项目

project.user在控制台中运行正常。

1 个答案:

答案 0 :(得分:2)

  

Project :: ActiveRecord_Relation的未定义方法`user':0x007f94b25dd010

首先,我假设@projects是使用before_filter在代码中的某处定义的,我还假设它返回记录集合。如果是这样,那么这就是问题

user.present? && user == record.user

此处record中的record.user将是记录集合而不是单条记录。所以record.user只是失败了。

authorize @projects更改为authorize @project可以解决您的问题