Я рендерим полиморфные записи в представлении, циклически перебирая полиморфные записи и выбирая подходящий партиал для использования в полиморфных отношениях. Однако, когда пользователь управляет сайтом, каждая полиморфная запись может (или не может) иметь второй (альтернативный) фрагмент, который следует использовать в этой ситуации.
Так что в настоящее время я делаю следующее (псевдокод):
polymorphs.each do |poly|
if File.exists?( File.join( RAILS_ROOT, 'app', 'views', poly.type, '_alternate.html.erb' ) )
partial = "#{poly.type}/alternate"
else
partial = "#{poly.type}/original"
end
...
end
Это работает нормально, но это очевидное узкое место. Поэтому я хочу выполнить эти проверки на наличие этих альтернативных частичных раз только один раз, а затем кэшировать их.
Я начал с этого делать в инициализаторе, но недостатком является то, что он запускается только один раз в разработке, и в идеале я бы не хотел перезапускать сервер только тогда, когда я добавляю новый альтернативный партиал во время разработки .