0

私はindex.html.erbそう見える: ここに画像の説明を入力

ユーザーが「適用」ボタンを押すと、すべての日付をテーブルから csv ファイルにエクスポート (および保存) します。

reports_controller.rb次の行で次のように定義しました。

require 'csv'

そして、ajaxによってすべてのパラメーターをコントローラーに渡しました(関数の更新に)。

今:

start_day =ユーザーが選択した開始日

.

.

.

end_year =ユーザーが選択した最終年

私の更新機能で、csvファイルを作成しようとしました。2 つの日付の間でテーブルを検索するために、start_date と end_date という 2 つの変数を作成しました。

start_date = YYYY-MM-DD (ただし、YYYY は start_year、MM は start_month、DD は start_day です)。

end_date は start_date と似ています (ただし、end_year、end_month、および end_day があります)

これは私の更新機能です:

def update
    @start_day = params[:start_day]
    @start_month = params[:start_month]
    @start_year = params[:start_year]

    @end_day = params[:end_day]
    @end_month = params[:end_month]
    @end_year = params[:end_year]

    # the format of start_date and end_date will be: "YYYY-MM-DD"
    @start_date = @start_year + "-" + @start_month + "-" + @start_day
    @end_date = @end_year + "-" + @end_month + "-" + @end_day

    # get all the transactions between start_date to end_date
    @transactions = BillingTransaction.find(:all, :conditions =>["date(created_at) BETWEEN ? AND ? ", @start_date, @end_date])

    # create the csv file
    csv_string = CSV.generate do |csv|
        # insert the headers
        csv << ["transaction_type", "payment_method"]
        # run all over the transactions
        @transactions.each do |user|
            # each of transactions is inserted into the csv file
            csv << [BillingTransaction.transaction_type, BillingTransaction.payment_method]
        end
    end         

    # save it as 'BillingTransaction.csv'
    send_data csv_string,
    :type => 'text/csv; charset=iso-8859-1; header=present',
    :disposition => "attachment; filename=BillingTransaction.csv" 
end
4

1 に答える 1

4

まず第一にupdate、RESTfulの原則に違反するため、メソッドに含めるべきではありません。、などを呼び出すことができるカスタムメソッドを作成できますtransactions

何も変更せず、CSVを生成するため、GETメソッドとして機能します。もちろん、このメソッドを表示するには、ルートを変更する必要があります。

Date次のようなパラメータからオブジェクトを作成することもお勧めします。

@start_date = Date.new(@start_year.to_i, @start_month.to_i, @start_day.to_i)
@end_date = Date.new(@end_year.to_i, @end_month.to_i, @end_day.to_i)

文字列を作成する代わりに。

そして、eachブロックに実際の値を追加する必要があります。

@transactions.each do |transaction|
  # each of transactions is inserted into the csv file
  csv << [transaction.transaction_type, transaction.payment_method]
end

@そして最後に、ビューで使用したくない変数にインスタンス変数(記号で始まる)を使用する必要はありません。

したがって、ここでは接頭辞として、、を付ける必要はありません@

于 2013-02-13T14:05:21.653 に答える