ホーム DoRuby Ruby on Railsでカレンダーを表示する

Ruby on Railsでカレンダーを表示する

この記事はアピリッツの技術ブログ「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呼び出し表示しています。

コントローラは、リンクで先月や来月の年月日を返すために使っています。

記事を共有

最近人気な記事