2011-11-02 8 views
0

私は、レポートの日付範囲を選択したユーザーに基づいてHTMLレポートを生成するRailsビューを用意しています。link_toでオブジェクトのインスタンスを渡す方法(例として日付)

ユーザーに表示される内容が好きな場合は、同じレポートをcsvとしてエクスポートするボタンがあります。

私の問題は、以前にユーザーが選択した期間を便利に渡す方法です。私はさまざまなstackoverflow質問/答えをlink_toを介してパラメータを渡すことについて読んできましたが、これはやや動作しますが、日付はテキスト文字列として送信され、本当に必要なのはDateオブジェクトとして渡される日付です。

ここでは、文字列として日付のparamsを渡す私の現在のlink_to、です:

<%= link_to image_tag("Buttons/ExportReport.png", :border => 0), 
     export_sales_path(:start => @start_date, 
         :end => @end_date, 
         :sales => @items) %> 

は、誰かがどのようにのlink_toを経由してオブジェクトのインスタンスを渡すために私に言うことができれば、私はそれを感謝します。

読んでいただきありがとうございます。

答えて

2

URLにオブジェクトを渡すことはできません。 1つは、URLの長さに約1500バイトの制限があり、第2に、Rubyオブジェクトはそれらを作成したプロセスにのみ関連しています。

ここで覚えておくべき重要なことは、リクエストを受け取るプロセスがリンク付きのページを生成したプロセスと同じであるという前提がないことです。設計上、Ruby on Railsは受信リクエストごとにきれいなスレートで始まり、3つの基本機能(cachesession、およびデータベース)から抽出できるもの以外には何の知識もありません。

@itemsなどの場合は、データベースなどのどこかにこのセットを保存し、この保存済みセットにリンクするトークンまたは識別子をURLに挿入するか、それに合った表現に変換しますURLにリストが小さい場合は、いつも@items.collect(&:id).join(',')を送信して、受信側でそのデコードを行うことができます。

サブストアRails.cacheで使用できるMemcacheは、一時的なストアであれば、このようなものを置くのに適しています。

日付は簡単に整数として表現されるので、いつでもそれらをパラメータとして指定できます。アプローチは、次のようになります。

<%= link_to image_tag("Buttons/ExportReport.png", :border => 0), 
    export_sales_path(
     :start => @start_date.to_i, 
     :end => @end_date.to_i, 
     :sales => @items.collect(&:id).join(',') 
    ) %> 

あなたが必要な場合は、アイテムの非常に長いリストを供給することができますPOSTスタイルの要求にこれを切り替えることができます。

+0

ああ、ありがとう。私はこれがURLを使用していたことに本当に綿毛を付けていませんでしたが、明らかに今あなたが指摘しています。包括的な答えをありがとう。 – Snips

0

私はこれができないと思います。あなたができることは、日付を文字列として渡し、この文字列をコントローラのDateオブジェクトに解析することだけです。

+0

ご返信ありがとうございます。 – Snips

関連する問題