How to use gem FullCalender
Bài đăng này đã không được cập nhật trong 6 năm
Introducing
Full Calendar is an open source library. This is a library of javascript + jquery built with a good design, full of basic features for a Calendar and can be displayed in events on the calendar, helps manage jobs and tracks progress work more easily. This gem also allows us to use jQuery FullCalendar plugin, without having to download and install FullCalendar in assets.
Let's create rails app
rails new fullcalendar 
Gem that we need to add
gem "fullcalendar-rails"
gem "momentjs-rails"
In application.js file we add
//= require moment
//= require fullcalendar
And we need to add  *= require fullcalendar in file application.scss
Let's create a static_pages page
rails g controller StaticPages index 
static_pages / index.html.erb
<div class="calendar"></div>
Create model event
rails g model events name:string start_date:datetime end_date:datetime
rails g controller events
Rails.application.routes.draw do
  root 'static_pages#index'
  resources :events
end
After that we need to create a file  full_calendar.js
var initialize_calendar;
initialize_calendar = function() {
  $('.calendar').each(function(){
    var calendar = $(this);
    calendar.fullCalendar({
      header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,agendaWeek,agendaDay'
      },
      selectable: true,
      selectHelper: true,
      editable: true,
      eventLimit: true,
      events: '/events',
      select: function(start, end) {
        $.getScript('/events/new', function() {});
        calendar.fullCalendar('unselect');
      },
      eventDrop: function(event, delta, revertFunc) {
        event_data = {
          event: {
            id: event.id,
            start: event.start.format(),
            end: event.end.format()
          }
        };
        $.ajax({
            url: event.update_url,
            data: event_data,
            type: 'PATCH'
        });
      },
      eventClick: function(event, jsEvent, view) {
        $.getScript(event.edit_url, function() {});
      }
    });
  })
};
$(document).ready(function(){
  initialize_calendar();
});
Now we get fullcalender as below :
Now let's try to create a event:
class Event < ApplicationRecord
  validates :name, presence: true
  validates :start_date, presence: true
  validates :end_date, presence: true
end
events_controller.rb
class EventsController < ApplicationController
  def index
    @events = Event.all
  end
  def new
    @event = Event.new
  end
  def create
    @event = Event.new event_params
    @event.save
  end
  private
  def event_params
    params.require(:event).permit(:name, :start_date, :end_date)
  end
end
_new.html.erb
<div class="modal fade" id="new_event" role="dialog">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">×</button>
        <h4 class="modal-title">Create New Event</h4>
      </div>
      <div class="modal-body">
        <%= render 'form', event: @event %>
      </div>
    </div>
  </div>
</div>
_event.json.jbuilder 
date_format ='%Y-%m-%d'
json.id event.id
json.name event.name
json.start event.start_date.strftime(date_format)
json.end event.end_date.strftime(date_format)
_form.html.erb
<%= form_for @event, remote: true do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name, class:"form-control" %>
  <%= f.label :start_date %>
  <%= f.date_field :start_date, class:"form-control"  %>
  <%= f.label :end_date %>
  <%= f.date_field :end_date, class:"form-control"  %>
  <%= f.button :submit, class:"btn btn-primary" %>
  <%= link_to 'Delete',
              event,
              method: :delete,
              class: 'btn btn-danger',
              data: { confirm: 'Are you sure?' },
              remote: true unless @event.new_record? %>
<% end %>
new.js.erb
$('#remote_container').html('<%= j render "new" %>');
$('#new_event').modal('show');
Now we can create event :
All rights reserved