この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは。
エンジニア1年目。
Ruby始めて3週間目くらいのyukiです。
今回は、Ruby on Railsでカレンダーを作りたいと思います。
簡単にカレンダーが作れる便利なプラグイン「Calendar Helper」
というものもあるみたいですが、今回は使わず自力で作って見ます。
htmlで使える用、tableで書き出します。
ソースはこんな感じ。
helper————————————————————————————-
def table(week_count, date)
case week_count
when 0
#日曜日(赤色書き出す)
cal = “<td><span style=\”color:#ff0000;”>”#{date}</span></td>”
when 6
#土曜日(青色書き出す)
cal = “<td><span style=\”color:#0000ff;”>”#{date}</span></td>”
else
#その他の曜日
cal = “<td>”#{date}</td>”
end
cal
end
def calender(date_org)
cal = “”
cal << “<table>”
#表示するカレンダーの年月日データ
d = Date.new(date_org.year, date_org.month, date_org.day)
#表示するカレンダーの1日の曜日
youbi = d.beginning_of_month.cwday
#表示するカレンダー1日より左にある余白の数
left = (youbi == 7)? 0 : youbi
#表示するカレンダーの最終日
end_date = d.end_of_month
#表示するカレンダーの最終日の曜日
end_youbi = d.end_of_month.cwday
#表示するカレンダーの最終日の右にある余白の数
right = 6 – end_youbi
#日にち
date = 1
cal << “<tr>”
#1日より左にある余白分<td></td>を書き出す
left.times do
cal << “<td></td>”
end
#最終日の日数分回す
end_date.day.times do
if youbi == 7 && date != 1
youbi = 0
cal << “</tr>”
cal << “<tr>”
elsif youbi ==7 && date ==1
youbi = 0
end
cal << table(youbi, date)
youbi += 1
date += 1
end
#最終日の右にある余白分<td></td>を書き出す
right.times do
cal << “<td></td>”
end
cal << “</tr>”
cal << “</table>”
end
——————————————————————————————-
コントローラ(hoge) ——————————————————————–
def index
if params[:date]
begin
@date = Date.parse(params[:date])
rescue
@date = Date.today
end
else
@date = Date.today
end
end
#paramsに年月日データが入っているなら、そのデータ[@date]に入れる。
#入っていなければ、今日の年月日データを[@date]入れる。
——————————————————————————————-
view ————————————————————————————-
#@date.last_monthで先月のデータ
<%= link_to(‘先月’,:action=>’index’,:date=> @date.last_month) -%>
#@date.next_monthで来月のデータ
<%= link_to(‘来月’,:action=>’index’,:date=> @date.next_month) -%>
#これでカレンダーを書き出す。
<%= calender(@date, {:controller => ‘hoge’, :action => ‘index’}) %>
——————————————————————————————-
うん。わかりにくいね。
ヘルパーで
<table>
<tr>
<td>~</td>
…
<td>~</td>
</tr>
…
</tr>
</table>
となるようカレンダーを書き出してあげて、それをview呼び出し表示しています。
コントローラは、リンクで先月や来月の年月日を返すために使っています。