ランプの中身(Ruby on Railsのシステム開発)
ランプの中身(Ruby on Railsのシステム開発)では、株式会社ケイビーエムジェイのRuby on Railsエンジニアが蓄積したノウハウを公開しています。Ruby on Railに関する技術解説や実践的なノウハウなど、開発現場の技術に則したコンテンツを随時追加していきます。 初心者の方でもわかりやすい技術解説を心がけています。リクエスト、ご質問も受け付けいますので、ご気軽にコメントを記述して下さい。

< Rails プラグイン : CSS Gr... | メイン | RJSを用いて、日付プルダウンメニューを... >

tnの中身(Ruby
2008.04.21

RJSを用いて、日付プルダウンメニューを書き換える


お久しぶりです。tnこと谷です。

 

前回まではRailsプラグインネタをメインにお送りしてきましたが、今回はRJSに触れてみようと思います。

 

 

Railsアプリで、フォームから4月31日など、存在しない日付をDBに書き込むと、5月1日といったように、正規な日付に変更します。これはこれで便利なのですが、ユーザが「月末」を意識して4月31日と入力してしまった場合はちょっと困りものな気がしますね。

 

どうせなら、4月を選択している時点で30日までしか選べなければいいのでは?

 

というわけで、今回はRJSを使って、31日までない月に関しては選択できる日付を制限してみます。

 

 

とりあえず、準備しましょう。modelをgenerateして、datetime型カラムを作ります。

ruby script/generate model TestModel 

 

db/migrate/001_create_test_models.rb

create_table :test_models do |t|   t.column :time,:datetime end 

 

ruby script/generate scaffold TestModel 

 

 

layoutに(とにかくHTMLヘッダ内)に以下の宣言を追加してください。今回の場合は
app/views/layouts/test_models.rhtml です。

<%= javascript_include_tag :defaults %> 

 

 

コントローラ上に、RJS用のメソッドを追加します。
app/controllers/test_models_controller.rb

def date_counter   year =  params[:test_model]["time(1i)"]   month =  params[:test_model]["time(2i)"]   # 入力した年月の日数を取得   day_count = Time.days_in_month(month.to_i,year.to_i)   render :update do |page|     # optionを一旦削除     page.replace_html 'test_model_time_3i',""     # optionを書き換える     (1..day_count).each do |i|        page.insert_html :bottom,'test_model_time_3i',"#{i}"     end   end end 

 

app/views/test_models/_form.rhtml

<%= datetime_select 'test_model', 'time' %>

 

<%# 年、月のプルダウンが変更されたときに、date_counterを実行 %> <%= observe_field 'test_model_time_1i', :submit => :test,:url => {:action =>'date_counter'} %> <%= observe_field 'test_model_time_2i', :submit => :test,:url => {:action =>'date_counter'} %>

これを実行してみると、例えば2008年2月だったら日付の選択は29日まで、と制限されるようになります。

ただし、今回のソースには、

  1. 最初から31日ない月が選択されている場合に対処できていない
  2. 複数のdatetimeカラムがあった場合など、DRY対応
なんて課題があって情けないところ。これを改善せねば(特に1)使い物になりませんね…。それはまた、次の機会で。

 

ブックマークに追加する Subscribe with livedoor Reader あとで読む

KBMJのWebソリューション
Ruby on Rails Summer Festival 2008開催決定!!

TOPICS

2008/06/25
ZD Net Builder」の連載記事です。第四回は「Rubyでどう書く?:重複したRSSをまとめる」が掲載されました。

2008/05/30
ZD Net Builder」の連載記事です。第三回は「Rubyでどう書く?:Rubyで特定URLの画像パス一覧を表示する」が掲載されました。

2008/05/07
ZD Net Builder」に連載を始めました。第二回は「Rubyでどう書く?:RubyでPDF履歴書を作成する」が掲載されました。

2008/04/24
アットマーク・アイティ」に『 Rubyを使ってPaSoRi経由でSuicaの乗車履歴を取得し、GoogleMapsやGoogleEarthで表示する』が掲載されました。

カテゴリ

全体のRoR最新ブログ一覧

プロフィール

  • tn
  • 新人エンジニアtnです。

    このブログでは主にRuby on Railsのプラグインの紹介をして行きます。
    開発の手助けになれば幸いです。

    ■開発環境
    OS
    ・自宅ではUbuntu on VMware on Windows XP
    ・会社ではMac OS X
    Rails
    ・1.2.5

    ブログは主に自宅で書いています。

ブログの購読

RSS

timelog
株式会社ケイビーエムジェイロゴ