@Fly3110
web developer

Почему не работает «не» в ограничениях в роутинге rails?

Всем привет!

Вот часть route.rb:

Rails.application.routes.draw do
  authorized     = ->(request) { request.session[:user_id].present? }
  constraints !authorized do
    ...
  end

  constraints authorized do
    ...
  end
end


так не работает. Всегда срабатывают маршруты из первого блока. Даже когда в сессии есть значение.
Если прописать вторую лямбду:
not_authorized = ->(request) { request.session[:user_id].blank? }
и "завязаться" на нее, то все работает.

Подскажите пожалуйста, почему так?
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
У вас `authorized` это лямбда. Тоесть это функция, которая будет выполняться каждый раз, когда запрос придёт в рельсы.
А вот это `!authorized`, это отрицание от лямбды, оно всегда будет ложью. Это не отрицание результата выполнения лямбды, это отрицание для самого объекта лямбды.

2.3.1 :001 > ->() { false }
 => #<Proc:0x00000001f744e0@(irb):1 (lambda)>
2.3.1 :002 > !(->() { false })
 => false
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@CapeRatel
authorized = request.session[:user_id].present? ? request.session[:user_id] : nil
if authorized
  Айди есть
else
  айди нет
end
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы