我有一个名为'reports'的控制器。在其中,我想通过部分显示预制报告。就目前而言,我不想制作一个完全成熟的SQL查询/报告生成器,所以我认为最简单的方法是每次我想创建一个新报告时,我只在部分文件中这样做。然后我上传该文件,所有路由/方法都是动态生成的。这意味着控制器中有一个方法可以查看views目录中的partials,然后返回一个url-safe字符串,用于路由和控制器模型中。
我的问题是“这会产生速度瓶颈”吗?这样,每次请求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