今回、本当はモデルの特定アトリビュートだけにバリデーションを実行するプラグイン「valid_attributes」を公開しようかと思っていたのですが、
個人的なサイトの方で公開してしまったので、今回は protocalendar.js の ruby on rails 用ヘルパメソッド(のひな形)を公開したいと思います。
オプション関係など完璧ではないのですが、独自ヘルパメソッドを作るベースになればと思います。
action_view_ext.rb
module ActionView
module Helpers
module FormHelper
def date_field(object_name, method, options = {})
result = text_field_for_date(object_name, method, options)
styleId = options[:id] ? options[:id] : object_name.to_s + '_' + method.to_s
contents = "InputCalendar.createOnLoaded('#{styleId}', {";
lang = options[:lang] ? "lang:#{options[:lang]} " : "lang:'ja'"
contents << lang
contents << ", startYear:#{options[:startYear]} " if options[:startYear]
contents << ", endYear:#{options[:endYear]} " if options[:endYear]
contents << "});";
return (result + javascript_tag(contents))
end
protected
def text_field_for_date(object_name, method, options = {})
tag = InstanceTag.new(object_name, method, self, nil, options.delete(:object))
result = tag.value(tag.object)
unless result.nil?
time = result.strftime("%Y/%m/%d")
tag.object.write_attribute(method, time) unless tag.nil?
end
return tag.to_input_field_tag("text", options)
end
end
end
end
デフォルトで lang:’ja’ を使っているため、日付フォーマットが yyyy/mm/dd になるように、
FormHelper を拡張して、text_field_for_date で小細工をしています。
cakephp 用のヘルパメソッドも近々公開します。

スプーキーズラボブログは株式会社スプーキーズの技術関連の情報を発信するブログです。プロダクト一覧、お問い合わせなどはスプーキーズラボのサイトをご覧ください。
バグ報告はコメントか、お問い合わせからお願いします。
設置サポートは有料でのみ受け付けています。その場合も、お問い合わせからお願いします。
6月 13th, 2008 at 1:24 PM
Railsで試しております。エラーが出てトホホになっています。
コントローラのヘルパーに
module hoge
include ActionView::Helpers
(上記のコード)
ビューに
カレンダーは表示されず、Firefoxのfirebugにエラーが出ます。
calrndr.getPrevButton().observe is not a function
protocalendar.js (line 619)
prototype.jsの問題なのか、protocalendar.jsの問題なのかハッキリと判別できていません。
ちなみにサンプルはローカルで元気良く動いています。
なんだか、コチラで尋ねるべきことではないような気もしますが、よろしくお願いします。
6月 14th, 2008 at 3:09 PM
なんとなく自己解決しました。
RailsはUTF8、prototype.js(1.5)とprotocalendar.js(1.1.0)がSJISと文字コードが混在していたのが原因のようでした。
prototype.js(1.6.0.2)とprotocalendar.js(1.1.5.1)をUTF8にするとFirefoxで動くようになりましたが、IE7ではカレンダーが閉じない問題が発生しました・・・
もうすこし検証してみます。
6月 17th, 2008 at 3:28 PM
>>kenmituoさん
弊社のプロダクト上では rails 2.0.2 もしくは 2.1.0 で、
prototype.js 1.6.0.2 と protpcalendar.js 1.1.5.1 の組み合わせはこのヘルパーで動作確認できております。
prototype.js 1.5 系の場合、prototype.js 1.5.1.1 を単体で使った場合、protocalendar の動作確認はできているので、effect.js も読み込んでいるなら、script.aculo.us (effects.js)のバグだと思います。
prototype.js 1.5.1.1 であれば、
http://script.aculo.us/dist/
にある scriptaculous-js-1.7.1_beta3 であれば大丈夫なはずです。
また、設置サポートは有償で承っておりますのでそちらもよろしくお願いします。
4月 3rd, 2009 at 5:46 PM
素敵なプログラムを公開していただき有り難うございます。
是非利用させていただきたいと思っています。
ところで、Rails の form_for ~ end の中で使う際、newアクションのときは現在時刻、editアクションのときは前回値を初期値として格納したいのですが、可能でしょうか?もし可能であれば、ご教授いたでけると幸いです。
何分初心者でスキル不足のため、プログラムとにらめっこしてはみたものの、どうしたらよいか全く分かりませんせんでした。よろしくお願いします。