2008年6月30日月曜日

Rails:画面遷移無しでファイルアップロード



■画面遷移無しでファイルアップロード
Railsでファイルアップロードを行うには、FORMを下記のように準備すれば、

<%= form_tag({:action=>'upload'},:multipart=>true) %>
<%= file_field 'attached_file', 'attached_file','size'=>29 %>

file = params[:attached_file]で受け取り、file.readをFileなりDB格納できますが、FORMで他のテキストを編集させる兼ね合いでページ遷移を発生させたくありませんでした。

■通常のFORMタグでAjax風の操作感を実現
RailsにはAjaxに対応したform_remote_tagがありますが、残念ながら:multipartの指定ができません。セキュリティ上の制約によりjavascript ではローカルファイルへのアクセスができないからだそうです。

■responds_to_parent
そこでresponds_to_parentを利用してみることにしました。
コントローラでresponds_to_parent利用することで、サーバ側からページを制御することができます。

ruby script/plugin install http://sean.treadway.info/svn/plugins/responds_to_parent/



■リクエストの作成
通常のFORMを生成するstart_form_tagを使いますので、:multipart=> trueを指定できます。

<%= start_form_tag ({:action => 'attach_file'},
{:id =>"att_form",
:multipart=> true,
:target=> "dummy_frame",
:onsubmit=>"submit();Form.disable('main_form');return false;"}) %>
<%= end_form_tag %>

Javascriptでsubmitし、targetを同rhtmlファイル内に配置したダミーのiframeにすることで、画面遷移せずにリクエスト送信可能になります。

<iframe id='none' name="dummy_frame" style="display:none;" src=<%= url_for(:action=>'dummy_action') %>></iframe>


■レスポンスの作成
コントローラでレスポンスを制御しますが、必要なパラメタオブジェクトなどを生成後、renderなどする代わりにresponds_to_parentを利用します。
下記の例では、rhtml内の
<div id="div_attachedfile">hoge</div>
の部分を_attachedfile.rhtmlで更新した上で、disableだったmain_form,cancel_formの2つのFORMを有効にしています。

responds_to_parent do
render :update do |page|
page.replace_html('div_attachedfile',
:partial=>"attachedfile",
:object=>@attached_files)
page << "Form.enable('main_form');Form.enable('cancel_form');"
end
end


■iframeでsrc指定が無いとSSLページでセキュリティ警告が発生します
上記のiframeタグの例で、src=<%= url_for :action=>"dummy_action" %>を指定し、コントローラにてこれに対応した下記のアクションを作成しています。

def dummy_action
render(:nothing=>true)
end


これがないとIEでSSLページを表示した際に、
このページにはセキュリティで保護されている項目と保護されていない項目が含まれています。保護されていない項目を表示しますか?

という警告メッセージが出てかなりウザいことになります。
iframeでSRC 属性を指定しないと発生するということですのでsrcを指定すればよいのですが、当然これに対応したサーバ側リソースが必要ですので、上記のようにdummy_actionを作成しました。


■参考
Ajaxっぽく画面遷移なしでファイルアップロードしたい!
Ruby on Rails: ファイルアップロード機能を作る
[PRB] FRAME/IFRAME を含むページを SSL により参照するとセキュリティ警告メッセージが発生する




2008年6月27日金曜日

農業ビジネス

実家では2haの稲作と、同程度の麦、甘藷(さつま芋)の作付け、販売農家をしています。
これまで実家へ戻って家を継ぐ件とあわせて農業自体を避けていたところが正直ありましたが、就農するにせよ、生涯拒否し続けるにせよ、この問題と直面せざるを得ない状況になってきています。
両親の高齢化、稲作の展望の暗さ(というより絶望感)、後継者の不在、というような間接的なものだけではなく、自分自身のキャリアを考える上でITビジネスで一生食べてゆけるスキルと人脈、資金を継続させていけるのか、行くのか、という状況にきているわけです。

そんな折、改めて農業ビジネスがどの程度現実的なものなのか、まずはネットをさまよってみました。
(とっても忙しいのに、。。。)

下記のような観点で一度整理してみたいと思いました。
・理念
・経営形態
・農業ノウハウ
・ビジネスプラン(事業内容、資金[資本、借入]、体制、農地、販売、ブランド、IT導入、・・)
・ビジネス環境(情勢、法令、世論、イメージ、地域、家族、・・)
・意思、責任感、使命感といった気持ち(一番大事でしょう。当然)

上記はたたき台としての項目列挙ですので、追加変更する予定です。
詳細含めて後日エントリーしたいと思います。



2008年6月26日木曜日

さすが俺!


Ruby On Rails、Java開発の軌跡、mobile、IT会社経営、IT個人事業、新ビジネス、家族や将来についてログを残す場所にして行きたいと思います。

最近、既に2度も挫折しているレコーディングダイエットを再開しました。
自分でも、ほんとに意思の弱さに辟易していますが、これが現実です。。
2回ともNokia E61のメモに1日1エントリの形式で記入していたのですが、レコーディングダイエットに成功した友人が、「ノートにすべての食事をもれなく書いていった。」と言っていたのを思い出し、専用ノートを作ることにしました。

これが正解?だったのか、実家に帰っていた3日のブランクはあるものの3週間のすべての記録ができています。体重も2キロ減、今後続きそうな自信もあります。

記録の大事さ、効果の高さを再認識しています。
最近は手書きメモに加えてデジタルの記録が有力な選択肢としてありますが、一覧性や場所を選ばないという点では手書きにはまだまだ及ばないのではないでしょうか。編集の容易さ、再利用性、ブログやメルマガとして公開することで自分を追い込むといった利点のあるデジタルメモとの組み合わせ、使い分けは、皆さんそれぞれ持っているんでしょうね。

■とにかく記録は大事、有効。日々の徒然を書いておこう。

■レコーディングダイエットは手書きがよさそう

ということで、凹みそうになることはたくさんありますが、「さすが俺!」の精神、根拠の無い自信を持って再度、自分を始動してみよう!