Я пытаюсь научиться использовать pundit с моим приложением Rails 4.Rails 4 - pundit - как написать if, чтобы проверить права пользователя
У меня есть политика использования потенциала. Таблица потенциального использования имеет атрибут: user_id.
Я хочу, чтобы пользователям разрешалось обновлять экземпляры, если они их создали. Я пытаюсь выяснить, как заставить действие обновления работать.
Мои текущие попытки показаны ниже.
class PotentialUsePolicy < ApplicationPolicy
attr_reader :user, :record
def initialize(user, record)
@user = user
@record = record
end
def index?
true if user.is_admin?
end
def show?
true
end
def new?
true
end
def create?
new?
end
def update?
if @user.id == @potential_use.user_id
# if user.id == potential_use.user_id
true
else
false
end
end
def destroy?
update?
end
def edit?
true
end
def potential_use
record
end
end
Когда я пытаюсь это, я продолжаю получать ошибки говоря:
undefined method `user_id' for nil:NilClass
Я не понимаю, почему я получаю это сообщение. Когда я смотрю в консоли, я вижу запись с идентификатором пользователя.
p = PotentialUse.where(project_id: 26)
PotentialUse Load (0.5ms) SELECT "potential_uses".* FROM "potential_uses" WHERE "potential_uses"."project_id" = $1 [["project_id", 26]]
=> #<ActiveRecord::Relation [#<PotentialUse id: 9, comment: "adsfsfdadfasdddxxddbbdd", project_id: 26, created_at: "2016-08-18 23:16:06", updated_at: "2016-08-24 01:06:00", user_id: 1, private_comment: false>]>
2.3.0p0 :016 >
Когда я смотрю с точкой зрения (не пытаясь использовать политику Пандита, страница предоставляет все нужное содержание, включая имя пользователя (доступ к которой осуществляется с помощью user_id).
Обновления действие в моем потенциальном контроллере Использовались:
def update
authorize @potential_use
respond_to do |format|
if @potential_use.update(potential_use_params)
format.html { redirect_to @project, notice: 'Potential use was successfully updated.' }
format.json { render :show, status: :ok, location: @potential_use }
else
format.html { render @project }
format.json { render json: @potential_use.errors, status: :unprocessable_entity }
end
end
end
Может кто-нибудь увидеть, что я сделал неправильно
Но если у меня есть метод, называемый потенциальным использованием в моей политике, который определяется как запись. Итак - я думаю, что моя попытка (прокомментированная версия) такая же, как ваша. он не работает (nether делает версию, где я пытаюсь использовать символ «@». – Mel
Кроме того, я попробовал ваше предложение, но он дает эту ошибку: undefined method 'user_id 'для # –
Mel
Iam sorry, если этот вопрос неуместно, но вы назначили переменную @potential_use? Может быть, в before_action или что-то еще? –