2016-02-01 3 views
0

Я не могу ограничить просмотр модели Project владельцем. Не могу понять это: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 в консоль работает нормально.

+0

Я подозреваю 'разрешить @ projects'. У вас '@ project' не' @ projects'. – Pavan

+0

У вас есть '@ projects' где-то определен? – Pavan

ответ

2

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

Во-первых, я бы предположить, что @projects определен где-то в коде с помощью before_filter, а также я предполагаю, что его возвращение в коллекцию записей. Если да, то здесь вопрос

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

record Здесь в record.user будет коллекция записей не одну запись. Так что record.user просто терпит неудачу с этой ошибкой.

Изменение authorize @projects к authorize @project должны решить вашу проблему

 Смежные вопросы

  • Нет связанных вопросов^_^