Будьте в курсе запросов, которые отправляются сразу после обновления запроса токена со старым действительным токеном. Я рекомендую использовать перехватчик и ставить в очередь все запросы, отправленные после refreshToken. Подождите, пока придет refreshToken, а затем отправьте запросы в очередь.
Другой способ - перехватить ошибку 401 -> запрос на копирование -> refreshToken -> отправить копию запроса.
РЕДАКТИРОВАНИЕ: Посмотрите на комментарии и другие ответы. Существуют более умные ответы, чем этот! Или попытайтесь улучшить этого как общественную Wiki.
Модели не регистрируют себя к объекту шаблона, таким образом, не, направляющие не имеют списка моделей.
, Но Вы могли все еще посмотреть в содержании каталога моделей Вашего приложения...
Dir.foreach("#{RAILS_ROOT}/app/models") do |model_path|
# ...
end
РЕДАКТИРОВАНИЕ: Другая (дикая) идея состояла бы в том, чтобы использовать отражение Ruby для поиска каждого классы, который расширяет ActiveRecord:: Основа. Не знайте, как можно перечислить все классы хотя...
РЕДАКТИРОВАНИЕ: Только для забавы, я нашел способ перечислить все классы
Module.constants.select { |c| (eval c).is_a? Class }
РЕДАКТИРОВАНИЕ: Наконец преуспевший список всех моделей, не смотря на каталоги
Module.constants.select do |constant_name|
constant = eval constant_name
if not constant.nil? and constant.is_a? Class and constant.superclass == ActiveRecord::Base
constant
end
end
, Если Вы хотите обработать производный класс также, затем необходимо будет протестировать целую цепочку суперкласса. Я сделал это путем добавления метода к классу Класса:
class Class
def extend?(klass)
not superclass.nil? and ( superclass == klass or superclass.extend? klass )
end
end
def models
Module.constants.select do |constant_name|
constant = eval constant_name
if not constant.nil? and constant.is_a? Class and constant.extend? ActiveRecord::Base
constant
end
end
end
Это, кажется, работает на меня:
Dir.glob(RAILS_ROOT + '/app/models/*.rb').each { |file| require file }
@models = Object.subclasses_of(ActiveRecord::Base)
направляющие только загружают модели, когда они используются, таким образом, строка Dir.glob "требует" всех файлов в каталоге моделей.
, После того как у Вас есть модели в массиве, можно сделать то, что Вы думали (например, в поле зрения кодируйте):
<% @models.each do |v| %>
<li><%= h v.to_s %></li>
<% end %>
С направляющие 6 , Zetiwerk стал загрузчиком кода по умолчанию.
Для нетерпеливой загрузки, попробуйте:
Zeitwerk::Loader.eager_load_all
Затем
ApplicationRecord.descendants
На случай, если кто-нибудь наткнется на это, у меня есть другое решение, не полагаясь на чтение dir или расширение класса Class...
ActiveRecord::Base.send :subclasses
Это вернет массив классов. Тогда можно сделать
ActiveRecord::Base.send(:subclasses).map(&:name)
В одной строке: Dir ['app / models / \ *. Rb '] .map {| f | File.basename (f,'. * '). camelize.constantize}