DynamicCalendarHelper を試してみる
どういった経緯でこれがあるのを知ったのか忘却の彼方ですが、google notebook に情報の断片が残存しておりましたので、実装試験を。
とりあえず、ココ から webcalendar.zip をオとしておく。できれば解凍も。
プロジェクト作成
webcal という rails プロジェクトを作成。
$ ruby rails/railties/bin/rails webcal $ cp rails webcal/vendor/. -r
DB 作成
DB のサービスが動いているホストで DB を作成。名前は web_calendar_dev とし、接続ユーザなんかは適当。
$ mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 77 to server version: 5.0.22-Debian_2bpo1-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create database web_calendar_dev default character set utf8 ; Query OK, 1 row affected (0.15 sec) mysql> grant all privileges on web_calendar_dev.* to xxx@172.16.100.4 identified by 'xxx' ; Query OK, 0 rows affected (0.25 sec) mysql> \q Bye $
クライアント側からの接続試験は略。config/database.yml も修正しておく。
scaffold 使って event コントローラを作成
えーと、rails が webcal/vendor/ 配下にコピられていないと、./script/generate とかがきちんと動かない事を発見。知らんかったよ。しかも scaffold 作成時にはテーブルがねぇと駄目なのか。
てコトで events テーブル作成しときます。マンドくせぇのでサーバ側で。
$ mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 80 to server version: 5.0.22-Debian_2bpo1-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> connect web_calendar_dev ; Connection id: 81 Current database: web_calendar_dev mysql> create table `events` ( -> `id` int(11) NOT NULL auto_increment, -> `name` varchar(255) default NULL, -> `description` text, -> `startdate` date default NULL, -> PRIMARY KEY (`id`) -> ) TYPE=MyISAM ; Query OK, 0 rows affected, 1 warning (0.15 sec) mysql> \q Bye $
で generate を。
$ ./script/generate scaffold Event exists app/controllers/ exists app/helpers/ create app/views/events exists test/functional/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/event.rb create test/unit/event_test.rb create test/fixtures/events.yml create app/views/events/_form.rhtml create app/views/events/list.rhtml create app/views/events/show.rhtml create app/views/events/new.rhtml create app/views/events/edit.rhtml create app/controllers/events_controller.rb create test/functional/events_controller_test.rb create app/helpers/events_helper.rb create app/views/layouts/events.rhtml create public/stylesheets/scaffold.css $
一応動作の確認はしておきましょう。
calendar コントローラの作成
$ ./script/generate controller calendar exists app/controllers/ exists app/helpers/ create app/views/calendar exists test/functional/ create app/controllers/calendar_controller.rb create test/functional/calendar_controller_test.rb create app/helpers/calendar_helper.rb $
で、最初に download しておいた webcalendar.zip を解凍したフォルダ内の app/helpers/ に calendar_helper.rb があるのでコピーをしておく。(コマンドは略)
又、app/views/layouts/application.rhtml と public/stylesheets/calendar.css も取得しておく必要あり。
その後、calendar_controller.rb の index アクションを以下のように修正。(webcalendar.zip に同梱)
app/controllers/calendar_controller.rb
class CalendarController < ApplicationController def index @year = @params[:year].to_i @month = @params[:month].to_i events = Event.find_all @databinder = lambda do |d| cell_text = "#{d.mday}<br />" cell_attrs = {:class => 'day'} events.each do |e| if e.startdate == d cell_text << e.name << "<br />" cell_attrs[:class] = 'specialDay' end end [cell_text, cell_attrs] end end end
又、ビューも作成しておく。(これも同様に webcalendar.zip に同梱)
app/views/calendar/index.rhtml
<h1>Dynamic Calendar Example</h1> <%= calendar({:year => @year, :month => @month, :abbrev => (0..-1)}, &@databinder) %>
これでサーバを起動すればカレンダ表示のみの雛形は表示可能。
で、config/routes.rb に以下のナニを追加して試験してみたんですが,DirectoryIndex のみ NG で (public/index.html が表示) なんでよー、と思っていたらコメントに public/index.html 消せって書いてるし (鬱
# You can have the root of your site routed by hooking up '' # -- just remember to delete public/index.html. # map.connect '', :controller => "welcome"
(config/routes.rb より引用)
とりあえず、public/index.html をリネイムしたら動きますた。しばらくこれをいじくり回すことにします。(しまった。テーブルは migrate で作るべきだった)