J'ai eu une longue pause de mes 2 années d'efforts pour essayer d'apprendre à utiliser l'application pundit dans mes rails. Je suis de retour et j'essaie d'apprendre à utiliser Pundit.Rails 5 - comment utiliser Pundit
J'ai fait une application entièrement nouvelle rails 5 et pundit installé.
J'ai une ressource utilisateur, une politique d'application et une politique d'utilisateur. Chacun a:
utilisateurs contrôleur:
def index
# @users = User.all
@users = policy_scope(User)
end
Application de la politique
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?
false
end
def new?
create?
end
def update?
false
end
def edit?
update?
end
def destroy?
false
end
def scope
Pundit.policy_scope!(user, record.class)
end
class Scope
attr_reader :user, :scope
def initialize(user, scope)
@user = user
@scope = scope
end
def resolve
scope
end
end
end
Conditions d'utilisation
class UserPolicy < ApplicationPolicy
class Scope < Scope
def resolve
scope.where(user: user)
end
end
end
Puis dans mon index de l'utilisateur, je suis en train de suivre les instructions les docs pundit gem, en faisant:
<% policy_scope(@users).each do |user| %>
Je reçois cette erreur:
PG::UndefinedColumn: ERROR: column users.user does not exist
LINE 1: SELECT "users".* FROM "users" WHERE "users"."user" = '566119...
^
: SELECT "users".* FROM "users" WHERE "users"."user" = '566119d2-54d8-4ab2-b7c5-f17c80b517f3' AND "users"."user" = '566119d2-54d8-4ab2-b7c5-f17c80b517f3'
Quelqu'un peut-il voir comment je descendre au mauvais départ? Je n'ai même pas essayé de définir ma portée de la façon dont je veux encore, mais cela ne fonctionne pas à ce stade.
Peut-être que vous vouliez dire 'scope.where (id: user.try (: id))'? – slowjack2k