Pundit 抛出未定义的方法“用户”

Pundit throws undefined method `user'

我无法将项目模型视图限制为所有者用户。无法弄清楚这一点:

错误:

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 在控制台中工作正常。

undefined method `user' for Project::ActiveRecord_Relation:0x007f94b25dd010

首先,我假设 @projects 是在您的代码中使用 before_filter 定义的,并且我还假设它返回一个 记录集合 .如果是这样,那就是问题所在

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

此处 record.user 中的 record 将是 记录集合 而不是 单个记录 。所以 record.user 因该错误而失败。

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