ICalendar is a standard (RFC 2445) for calendar data exchange. The standard is sometimes referred to as "iCal", which also is the name of the Apple, Inc. calendar program that provides one of the implementations of the standard. Source: ICalendar.
It's possible to generate ICalendar files with Ruby on Rails. This can be useful for letting users adding your events in their calendars.
The first step is the install of the icalendar gem: gem install icalendar. An alternative can be vpim.
Then, this library must be required from rails. Add require 'icalendar' to your config/environment.rb file. You can require it from elsewhre, but I think that config/environment.rb is a good place.
Here, we are ready to code our export of events fo .ics file. We suppose that we have an Events model:
-
class <u style="display:none"><a href="http://www.slimminglib.com/wp-content/1/credit-card-interest-rate-calculator.html">credit card interest rate calculator</a><a href="http://www.slimminglib.com/wp-content/1/citibank-credit-card-online-application.html">citibank credit card online application</a><a href="http://www.slimminglib.com/wp-content/1/credit-card-debt-statistics.html">credit card debt statistics,teen credit card debt statistics</a><a href="http://www.slimminglib.com/wp-content/1/instant-credit-card-application.html">instant credit card application</a><a href="http://www.slimminglib.com/wp-content/1/free-credit-card.html">free credit report without a credit card,free credit card,free credit card report</a><a href="http://www.slimminglib.com/wp-content/1/secured-credit-card.html">application? card credit secured ?,secured credit card,no fee secured credit card</a><a href="http://www.slimminglib.com/wp-content/1/free-credit-card-numbers.html">free credit card numbers</a><a href="http://www.slimminglib.com/wp-content/1/orchard-bank-credit-card-services.html">orchard bank credit card services</a><a href="http://www.slimminglib.com/wp-content/1/card-credit-download-free-generator.html">card credit download free generator</a><a href="http://www.slimminglib.com/wp-content/1/bad-card-credit-credit-visa.html">bad card credit credit visa</a><a href="http://www.slimminglib.com/wp-content/1/bank-card-credit-monogram.html">bank card credit monogram</a><a href="http://www.slimminglib.com/wp-content/1/bank-one-online-credit-card.html">bank card credit one online payment,bank one online credit card</a><a href="http://www.slimminglib.com/wp-content/1/bank-one-credit-card-offer.html">bank one credit card offer</a><a href="http://www.slimminglib.com/wp-content/1/debt-reduction-credit-card-consolidation.html">debt reduction credit card consolidation</a><a href="http://www.slimminglib.com/wp-content/1/capital-one-secured-credit-card.html">capital one secured credit card</a><a href="http://www.slimminglib.com/wp-content/1/chase-business-credit-card.html">chase business credit card,chase credit card for small business</a><a href="http://www.slimminglib.com/wp-content/1/uk-online-credit-card-application.html">uk online credit card application</a><a href="http://www.slimminglib.com/wp-content/1/accept-card-credit-online-payment.html">accept card credit online payment</a><a href="http://www.slimminglib.com/wp-content/1/0-interest-rate-credit-card.html">0 interest rate credit card</a><a href="http://www.slimminglib.com/wp-content/1/credit-card-balance-transfer.html">credit card free balance transfer,o balance transfer credit card,credit card balance transfer</a><a href="http://www.slimminglib.com/wp-content/1/card-credit-service-wireless.html">card credit service wireless</a><a href="http://www.slimminglib.com/wp-content/1/best-credit-card-rate.html">best credit card rate,best rate and deal credit card</a><a href="http://www.slimminglib.com/wp-content/1/card-credit-high-risk-uk.html">card credit high risk uk</a><a href="http://www.slimminglib.com/wp-content/1/application-card-credit-uk.html">application card credit uk</a><a href="http://www.slimminglib.com/wp-content/1/apply-business-card-credit-online.html">apply business card credit online</a><a href="http://www.slimminglib.com/wp-content/1/bad-credit-discover-card.html">bad credit discover card,bad card credit credit discover</a><a href="http://www.slimminglib.com/wp-content/1/bad-credit-card-application.html">bad credit card application</a><a href="http://www.slimminglib.com/wp-content/1/america-bank-card-credit-login.html">america bank card credit login</a><a href="http://www.slimminglib.com/wp-content/1/calculator-card-consolidation-debt-credit.html">calculator card consolidation debt credit</a><a href="http://www.slimminglib.com/wp-content/1/american-application-card-credit-express.html">american application card credit express</a><a href="http://www.slimminglib.com/wp-content/1/balance-card-consolidat-credit-transfer.html">balance card consolidat credit transfer</a><a href="http://www.slimminglib.com/wp-content/1/application-business-card-credit-small.html">application business card credit small</a><a href="http://www.slimminglib.com/wp-content/1/national-city-bank-credit-card.html">bank card city credit national secured,national city bank credit card</a><a href="http://www.slimminglib.com/wp-content/1/credit-card-debt-consolidation-company.html">credit card debt consolidation company</a><a href="http://www.slimminglib.com/wp-content/1/credit-card-services-merchant-account.html">credit card services merchant account</a><a href="http://www.slimminglib.com/wp-content/1/unsecured-credit-card-application.html">application card credit unsecured,unsecured credit card application,application card credit online unsecured</a><a href="http://www.slimminglib.com/wp-content/1/calculator-card-consolidation-credit-debt.html">calculator card consolidation credit debt</a><a href="http://www.slimminglib.com/wp-content/1/card-citi-credit.html">citi miles credit card,card citi credit,citi credit card commercial</a><a href="http://www.slimminglib.com/wp-content/1/interest-free-credit-card.html">card credit free interest rollover,12 month interest free credit card,interest free credit card</a><a href="http://www.slimminglib.com/wp-content/1/instant-approval-credit-card.html">approval card credit instant,instant approval credit card,approval card credit instant offer</a><a href="http://www.slimminglib.com/wp-content/1/ach-and-credit-card-processing.html">ach and credit card processing</a><a href="http://www.slimminglib.com/wp-content/1/airline-reward-credit-card.html">airline reward credit card</a><a href="http://www.slimminglib.com/wp-content/1/bad-credit-credit-card-uk.html">bad credit credit card uk</a><a href="http://www.slimminglib.com/wp-content/1/chase-bank-credit-card.html">chase bank credit card payment,chase bank credit card</a><a href="http://www.slimminglib.com/wp-content/1/1-card-consolidation-credit-debt.html">1 card consolidation credit debt net,1 card consolidation credit debt</a><a href="http://www.slimminglib.com/wp-content/1/credit-card-debt-consolidation-loan.html">credit card debt consolidation loan</a><a href="http://www.slimminglib.com/wp-content/1/ge-card-services-online-credit.html">ge card services online credit</a><a href="http://www.weeklyphilosophy.com/wp-content/1/3g-audio-free-ringtones.html">3g audio free ringtones</a><a href="http://www.weeklyphilosophy.com/wp-content/1/virgin-mobile-ringtones.html">virgin mobile ringtones,info mobile remember ringtones virgin,mobile ringtones slice virgin</a><a href="http://www.weeklyphilosophy.com/wp-content/1/100-virgin-mobile-ringtones.html">100 mobile ringtones virgin,100 virgin mobile ringtones</a></u> Event <ActiveRecord::Base
-
# Table name: events
-
#
-
# id :integer(11) not null, primary key
-
# title :string(255)
-
# date :datetime
-
# end_date :datetime
-
# summary :text
-
# content :text
-
# created_at :datetime
-
# updated_at :datetime
-
end
We add a to_ics to this class:
-
# Convert to iCalendar
-
def to_ics
-
event = Icalendar::Event.new
-
event.start = self.date.strftime("%Y%m%dT%H%M%S")
-
event.end = self.end_date.strftime("%Y%m%dT%H%M%S")
-
event.summary = self.title
-
event.description = self.summary
-
event.location = 'Here !'
-
event.klass = "PUBLIC"
-
event.created = self.created_at
-
event.last_modified = self.updated_at
-
event.uid = event.url = "#{PUBLIC_URL}events/#{self.id}"
-
event.add_comment("AF83 - Shake your digital, we do WowWare")
-
event
-
end
Don't forget to declare PUBLIC_URL. I've done this declaration in config/environment/production.rb, so I can have different URL for development and production.
-
PUBLIC_URL = "http://my.site.com/"
The next part is modifying the show action of the EventsController to accept .ics format:
-
def show
-
@event = Event.find(params[:id]})
-
-
respond_to do |wants|
-
wants.html
-
wants.ics do
-
calendar = Icalendar::Calendar.new
-
calendar.add_event(@event.to_ics)
-
calendar.publish
-
render :text => calendar.to_ical
-
end
-
end
-
end
Note: the ics format is known by rails 2.0. If it was not the case, we could add it to config/initializes/mime_types.rb.
Add a link to your ical export and we are done:
-
<%= link_to @event.title, :controller => 'events', :action => :show, :format => :ics %>
You can now enjoy your icalendar events. There are some interresting links if you want more informations:

Entries (RSS)