У меня есть веб-приложение Ruby on Rails, где пользователи создают заметки. Примечание принадлежит пользователю, который его создал.Не удается завершить действие нового контроллера через жемчужину Pundit
Я установил Pundit gem для создания полномочий, в частности роли администратора.
Я хотел бы для пользователя, чтобы быть в состоянии:
- создавать, обновлять или удалять свои заметки
А для администратора, чтобы быть в состоянии сделать то же самое для любые примечания пользователя.
Когда я вхожу в систему как администратор, я могу создать новое примечание. Когда я вхожу в систему как член, я не могу создать новую заметку. Я сразу же перенаправляюсь на корневую страницу и даже не привожу на новую страницу заметки.
Вот сообщение об ошибке вспышки я получаю:
not allowed to new? this #<Note:0x007fe2ca17bc18>
Перед установкой Pundit, члены были в состоянии создать новую заметку. Поэтому я полагаю, что это связано с моими политиками.
Вот соответствующие методы из моего application_policy.rb
файла:
def index?
false
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
Вот мой note_policy.rb
файл:
class NotePolicy < ApplicationPolicy
def create?
user.present? && (record.user == user || user.admin?)
end
def new?
create?
end
def update?
create?
end
def destroy?
update?
end
end
А вот соответствующие действия от моего notes_controller.rb
файла:
def new
@note = Note.new
authorize @note
end
def create
@note = Note.new(notes_params)
@note.user = current_user
authorize @note
if @note.save
redirect_to notes_path
else
render :new
end
end
Я пытаюсь понять, почему администратор может создать новую заметку, но член не может.
спасибо.
Я думал, что, поскольку 'note_policy' наследует от' application_policy', а так как у меня уже есть правильный 'новый метод' в' application_policy', что я буду закрыт? Я думал, что это часть наследства, и СУХОЙ? В любом случае, я добавил: 'def new create? end' в 'note_policy', и он все еще не работает. Получение того же сообщения об ошибке. Благодарю. – HPJAJ
** ANSWER ** пришел из @EliotSykes. Для 'note_policy' добавить' def new user.present? end' Спасибо всем! – HPJAJ