Event calendar is a way to show multiple, overlapping events across calendar days and rows. This is an interface to add events, edit events, & destroy event. In Rails there is a gem/plugin “event_calendar” to implement it just like Google calendar.
The following steps demonstrate the implementation of event_calendar in both Rails 2.3.x and Rails3.x environment.
Step#1 –
Installing the gem/plugin
Install the required plugin from below path
script/plugin install git://github.com/elevation/event_calendar.git
Generate the necessary static file and example
script/generate event_calendar
Install the required gems
gem 'event-calendar', :require => 'event_calendar'
Run “bundle install”
You can also use as a Plugin, to install plugin
rails plugin install git://github.com/elevation/event_calendar.git
Generate the necessary static file for the event calendar
rails generate event_calendar
Step#2
Include the necessary style sheet & java-script into your layout/view
<%= stylesheet_link_tag "dialog","fullcalendar","jquery-ui","style" %>
<%= javascript_include_tag "jrails1/fullcalendar.js","jrails1/jquery-
ui.js","jrails1/gcal.js","jrails1/jrails.js","jrails1/jquery.validate.js"%>
Step#3
Create a migration file to add necessary columns as follows
class CreateEvents < ActiveRecord::Migration
def self.up
create_table :events do |t|
t.string :name
t.datetime :start_at
t.datetime :end_at
t.timestamps
end
end
def self.down
drop_table :events
end
end
Step#4
Add the necessary paths to the “config/routes” file
map.calendar '/calendar/:year/:month', :controller => 'calendar', :action => 'index',
:requirements => {:year => /d{4}/, :month => /d{1,2}/}, :year => nil, :month => nil
match '/calendar(/:year(/:month))' => 'calendar#index', :as => :calendar, :constraints => {:year => /d{4}/, :month => /d{1,2}/}
Step#5
Change the Event model to add the calendar as follows
class Event < ActiveRecord::Base
has_event_calendar
end
Step#6
Modify the Calendar controller as follows
class CalendarController < ApplicationController
def index
@month = (params[:month] || Time.zone.now.month).to_i
@year = (params[:year] || Time.zone.now.year).to_i
@shown_month = Date.civil(@year, @month)
@event_strips = Event.event_strips_for_month(@shown_month)
end
end
Step#7
You can also override the events method in helpers/calendar_helper.rb
module CalendarHelper
def month_link(month_date)
link_to(I18n.localize(month_date, :format => "%B"), {:month => month_date.month, :year => month_date.year})
end
# custom options for this calendar
def event_calendar_options
{
:year => @year,
:month => @month,
:event_strips => @event_strips,
:month_name_text => I18n.localize(@shown_month, :format => "%B %Y"),
:previous_month_text => "<< " + month_link(@shown_month.prev_month),
:next_month_text => month_link(@shown_month.next_month) + " >>"
}
end
def event_calendar
calendar event_calendar_options do |args|
event = args[:event]
%(<a href="/events/#{event.id}" title="#{h(event.name)}">#{h(event.name)}</a>)
end
end
end
Step#8
Add the following code to display the calendar in the view file
<%= event_calendar %>
See Also: Security Checks you must do before Rails App release
I hope it helps you. Planning anything in Ruby on Rails? Get in touch with Andolasoft experts. Feel free to give your valuable feedback.