またはまってしまった。
はまったのは、link_to_remoteの:afterオプション。
データをまとめて投入するために、CSVファイルとかをアップさせて、
それを利用してデータ投入したいときとかがある。
出来ればチェックを行っておいて、
それでOKならデータ投入、等の操作をしたいとする。
そんなとき、普通にフォームだけで最後まで突き進もうとしたとき、
あまりにファイルが大きすぎるとか、
チェック操作やデータ投入操作が冗長で時間がかかったりすることはままある。
で、(パフォーマンスチューニングして何とかしろ、というのはおいといて)
タイムアウトを避けたり、あ~、これ、動いてんのかな~?
というユーザーの疑惑の目を避けるため、
ひとまず、ファイルを受け付けたよ、というページに遷移してから、
更にチェックなり、データ投入なりをする操作をしてもらうようにしようと。
そのときに、link_to_remoteでページを部分的に遷移させ、
:afterオプションで処理中の画面を描画する。
処理中の画面は、単なるテキストでもいいんだけど、せっかくだから
アニメGIFを使って処理中のものを見せようと。
というわけで、処理中のページを作成して、
:afterオプションの中でrender :partialして見せる。
呼び出し側はこんな感じ
<%= link_to_remote "時間のかかる処理", :update=>'update_column',
:submit=>'params_column',
:after=>"Element.update('update_column','#{render :partial=>'processing_page'}')",
:url=>{:controller=>'hoge',
:action=>'fuga'} %>
で、やってみたら全然ページが切り替わらない。
Javascriptのエラーみたい。
いろいろタイプミスや、オプションの順番とかを調べて見るも、全くわからない。
で、FireBugでソースを見てみてふと気づいた。
render :partialで描画されるページの中身って、Javascriptのパラメータにそのまま入ってる。
そうです。
render :partialするページで改行してはダメだったんですねえ。
教訓:
Javascriptの中に展開される可能性のある部分では、
改行は一切禁止
ということでした。
PR