その他
    ホーム 技術発信 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呼び出し表示しています。

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