Для отображения календаря применяю гем Fullcalendar.
Есть конечно более сложная и лучшая идея, но к сожалению не могу реализовать пока для меня очень сложная. Опишу если кто то сможет написать код. Один запрос в бд получением всех событий, передать по json дополнительно два атрибута (current_user.id и event.user_id), а дальше по щелчку сделать выборку на js и отобразить отфильтрованные события. Или сразу отправлять две предварительно отсортированные массивы и переключателем производить отображение соответствующих типов(на уровне руби сортировку могу сделать но как на js их отобразить). Если ни кто не сможет реализовать задачу в сложном виде, прошу описать код в js как сделать представление из разных файлов по щелчку. Могу реализовать на двух страницах но это уже совсем плохое решение будет. Если у кого то есть другая более правильная реализация, прошу описать, если не составить Вам большого труда. Спасибо за внимание!
index.json.jbuilder(передача всех событий)
json.array! @events_all do |event|
json.id event[:id]
json.title event[:title]
json.start event[:start].to_time.strftime('%Y-%m-%dT%H:%M:%S')
if signed_in?
if event[:user_id] == current_user.id
json.url edit_event_path(event)
else
json.url event_path(event)
end
else
json.url event_path(event)
end
json.my_events my_events_path
end
<code lang="ruby">
my_events.json.jbuilder(передача событий только вошедшего пользователя)
json.array! @events_all do |event|
json.id event[:id]
json.title event[:title]
json.start event[:start].to_time.strftime('%Y-%m-%dT%H:%M:%S')
json.url edit_event_path(event)
end
</code>
<code lang="javascript">
fullcalendar.js
var calendar;
calendar = function (){
$(function () {
$('#calendar').fullCalendar({
customButtons: {
myCustomButton: {
text: 'my event',
click: function() {
/*здесь хочу пояснение*/
})
}
}
},
header: {
left: 'title',
right: 'myCustomButton, today, prev, next'
},
buttonText: {
today: "Сегодня"
},
monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
dayNamesShort: ["ВС","ПН","ВТ","СР","ЧТ","ПТ","СБ"],
selectable: true,
selectHelper: true,
editable: true,
eventLimit: true,
events: '/events.json',
eventClick: function(event) {
event.url
}
});
});
};
$(document).on('turbolinks:load', calendar);
</code>