Хобрук: Ваш путь к мастерству в программировании

Обратные вызовы skip_before_action в Rails 5.1 и наследование

Я только что обновил свое приложение до Rails 5.1, и меня укусило новое поведение обратных вызовов skip_before_action. то есть, если обратный вызов не определен в то время, когда я пытаюсь его пропустить, возникает ошибка.

Я знаю, что могу пройти рейз: ложь вроде

skip_before_action :authorise, raise: false

Но интересно, есть ли лучший способ сделать это.

Моя основная проблема заключается в том, что если для параметра «Нетерпеливая загрузка» установлено значение «истина», новое поведение нарушает модульную настройку моих контроллеров.

В основном у меня есть каталог app/controllers/api с module_controller.rb:

module Api
  class ModuleController < ActionController::Base
    before_action :authorise
  end
end

Затем у меня есть app_chats_controller.rb, который пропускает обратный вызов авторизации:

module Api
  class AppChatsController < ModuleController
    skip_before_action :authorise
  end
end

При нетерпеливой загрузке app_chats_controller.rb загружается первым, что означает, что обратный вызов еще не определен и без raise: true возникает ошибка.

Если мне придется стиснуть зубы и добавить ко всему raise: false, пусть будет так, но наверняка есть способ получше...


Ответы:


1

Попробуйте добавить require 'module_controller' в начало app_chats_controller.rb

03.05.2017
  • Это работает, но разве разрешение модуля Rails не должно определять это само по себе? 04.05.2017
  • У вас Rails.application.config.enable_dependency_loading установлено на true? 08.05.2017
  • Я идиот. Я наследовал контроллер модуля в одном месте от ActionController::Base, а не от ApplicationController... 09.05.2017
  • Новые материалы

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..

    GraalVM в 2022 году: итоги года
    2022 год был очень продуктивным для проекта и сообщества GraalVM. Вместе мы разработали множество новых функций, выпустили GraalVM для последних версий Java и новых платформ и увидели несколько..