私は 'レポート'というコントローラを持っています。その中で、私は部分的に既成の報告書を表示したい。それは、本格的なSQLクエリ/レポートジェネレータを作成したくないので、これを行う最も簡単な方法は、新しいレポートを作成するたびに部分的なファイルのみで行うことです。その後、そのファイルをアップロードすると、すべてのルート/メソッドがオンザフライで生成されます。つまり、コントローラには、viewsディレクトリを部分的に調べ、ルートとコントローラモデルで使用するURLセーフな文字列を返すメソッドがあります。ルートを作成するときにroutes.rbがディレクトリを参照することをお勧めしますか?
私が持っている疑問は、「これは速度のボトルネックを生成する」とは?このように、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
えええええええええええええええええええええええええええええ、私はレポートをモデル化し、テンプレートをテキストフィールドに格納します。また、同じモデルのフィールドとしてURLの安全な名前である 'slug'を格納します。このルートには、コントローラがレポートレコードをルックアップし、Erubisを使用してレイアウトに挿入するためのマークアップをレンダリングするために使用するスラグパラメータがあります。私の2セント – ffoeg
あなたが言ったことを読んだ後、私はあなたが言及した他のすべてと一緒に部分を格納するためにペーパークリップを使用して行くことに決めました。 – JakeTheSnake
うれしかった – ffoeg