Отключить маршрут на основе атрибута модели
Учитывая, что у меня есть Project
модель, проект должен быть утвержден для редактирования, проект с status=pending
не может быть отредактировано.
Раньше я делал это, скрывая ссылки редактирования в представлении на основе атрибутов состояния, но это не мешает пользователю вводить маршрут через браузер (например: projects/1/edit
), как я могу сделать маршрут редактирования недоступным в рамках данного статуса проекта?
2 ответа
Решение
Вы не хотите делать условный маршрут. Контроллер проверяет состояние и разрешает обновление только в том случае, если status =='pending'
,
def edit
@project = Project.find(params[:id])
if @project.status == 'pending'
render :head, :status=>401
else
#your edit code
end
end
Пожалуйста, добавьте ниже before_action, на основании которого вы можете предотвратить редактирование проекта.
#projects_controller.rb
before_action :can_edit?, only: :edit
def edit
#your existing implementation goes here.
end
def can_edit?
@project = Project.where(id: params[:id]).first
if @project.status == pending
flash[alert] = "Sorry can't be edited"
redirect_to projects_path
end
end