2011-12-09 8 views
0

私は 'レポート'というコントローラを持っています。その中で、私は部分的に既成の報告書を表示したい。それは、本格的な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 
+0

えええええええええええええええええええええええええええええ、私はレポートをモデル化し、テンプレートをテキストフィールドに格納します。また、同じモデルのフィールドとしてURLの安全な名前である 'slug'を格納します。このルートには、コントローラがレポートレコードをルックアップし、Erubisを使用してレイアウトに挿入するためのマークアップをレンダリングするために使用するスラグパラメータがあります。私の2セント – ffoeg

+0

あなたが言ったことを読んだ後、私はあなたが言及した他のすべてと一緒に部分を格納するためにペーパークリップを使用して行くことに決めました。 – JakeTheSnake

+0

うれしかった – ffoeg

答えて

0

このようなコードを書く前にSkinny Controller Fat Modelマントラを繰り返してください。

+0

OK;私はそのすべてを私のモデルに移します。私の質問に答えがありますか? – JakeTheSnake

関連する問題