У меня есть контроллер под названием «отчеты».В нем я хочу отображать готовые отчеты через партиалы.В сущности, я не хочу создавать полноценный генератор запросов / отчетов sql, поэтому я считаю, что самый простой способ сделать это - каждый раз, когда я хочу создать новый отчет, я делаю это только в частичном файле.Затем я загружаю этот файл, и все маршруты / методы создаются на лету.Это означает, что в контроллере есть метод, который просматривает каталог views для партиалов, а затем возвращает безопасную для URL строку, которая будет использоваться в маршрутах и в моделях контроллера.
У меня есть вопрос "будет ли это создавать узкое место в скорости "?Таким образом, каждый раз, когда запрашивается URL-адрес, выполняется поиск в каталоге.
Контроллер:
class ReportsController < ApplicationController
def initialize
super()
ReportsController::reports(true).each do |report|
self.class.send(:define_method, report.gsub('-', '_').to_sym) do
render "#{name_to_safe_url(report).gsub('-', '_')}.html.erb"
end
end
end
# Currently I'm just using a static array to give the reports.
# This will change such that it will look through the views directory
# for partials. It will read the file name and return it as part of the list
def self.reports(return_url = false)
list = [
"Revenue/Sale",
"Item Quantities",
"Number of Sales/Day",
"Compare Revenue to Past Dates"
]
return_url ? list.map{|i| name_to_safe_url(i)} : list
end
def self.name_to_safe_url(name)
name.gsub(/\//, ' per ').squeeze(' ').gsub(/[^a-z]/i, '-').squeeze('-').chomp('-').downcase
end
end