2015-05-09 2 views
1

я делаю это в Пользовательской # Show зрения:рубин драгоценный камень Пандит не кажется, делать политику правильно

<% if policy(Gallery.new).create? %> 
    <%= link_to "Add a photo gallery for #{@user.name}", new_user_gallery_path(@user), class: 'btn btn-success' %> 
<% end %> 

и администратор может добавлять галереи любому пользователю. Но никто другой не может.

Здесь галерея Политик:

class GalleryPolicy < ApplicationPolicy 
    def create? 
    user.present? && (record.user == user || user.admin?) 
    end 

    def new? 
    create? 
    end 
end 

Здесь политики Применения:

class ApplicationPolicy 
    attr_reader :user, :record 

    def initialize(user, record) 
    @user = user 
    @record = record 
    end 

    def index? 
    true 
    end 

    def show? 
    scope.where(:id => record.id).exists? 
    end 

    def create? 
    user.present? 
    end 

    def new? 
    create? 
    end 

    def update? 
    user.present? && (record.user == user || user.admin?) 
    end 

    def edit? 
    update? 
    end 

    def destroy? 
    update? 
    end 

    def scope 
    record.class 
    end 

    class Scope 
    attr_reader :user, :scope 

    def initialize(user, scope) 
     @user = user 
     @scope = scope 
    end 

    def resolve 
     scope 
    end 
    end 
end 

Как вы можете видеть, пользователь должен войти в системе, а запись должна принадлежать к ним, или они должны быть admin для них, чтобы создать галереи. Что я делаю не так?

+0

Можете ли вы предоставить дополнительную информацию, пожалуйста? «Pundit, похоже, неправильно проводит политику», не помогает. «Администратор может добавлять галереи к любому пользователю, но никто другой не может». это требование или некорректная текущая функциональность? «пользователь должен войти в систему, и запись должна принадлежать им, или они должны быть администратором для создания галерей», да, это то, что говорит ваша политика. Каково ожидаемое поведение и каково текущее неправильное поведение? – deefour

ответ

2

делает указания политики таким образом

if policy(Gallery).create? 

изменить исход?

+0

Я получаю эту ошибку: NoMethodError in Users # show Показаны /Users/RachelBird/code/jackhuahua/app/views/users/show.html.erb, где строка # 36 поднята: undefined method 'user 'for # Rachel

+0

Я собираюсь предположить, что строка 36 пользователей/показать '<% = link_to" Добавить фотогалерею для # {@ user.name} ",'? Или если нет, то какая линия? если у вас есть @user, указанный в вашем текущем контроллере? он установлен в current_user? Политика выглядит правильно, но она считает, что ошибка выходит за рамки политики. – Doon

+0

На самом деле строка 36 есть <% if policy (Gallery.new) .create? %>. Есть ли другая часть моего кода, которую я должен показать вам? – Rachel