Ruby on rails Ruby On Rails FullCalendar事件拖放不保存

Ruby on rails Ruby On Rails FullCalendar事件拖放不保存,ruby-on-rails,ruby,coffeescript,fullcalendar,Ruby On Rails,Ruby,Coffeescript,Fullcalendar,我正在开发一个新的RubyonRails应用程序,并使用FullCalendar进行日历管理。我有一系列称为“活动”的外部事件,我希望能够在拖动列并将它们放入日历时更新列在处开始和在处结束。我在这里阻塞,当我删除活动时,它不会更新我的值 这是我的活动/index.html.slim ul#external-events -@activities.each do |activity| li.fc-event data-ac-id="#{activity.id}" =activity

我正在开发一个新的RubyonRails应用程序,并使用FullCalendar进行日历管理。我有一系列称为“活动”的外部事件,我希望能够在拖动列并将它们放入日历时更新列
处开始和
处结束。我在这里阻塞,当我删除活动时,它不会更新我的值

这是我的活动/index.html.slim

ul#external-events
 -@activities.each do |activity|
   li.fc-event data-ac-id="#{activity.id}"
    =activity.title

#calendar_now
我的咖啡脚本文件

$(document).ready ->
  $('#calendar_now').fullCalendar
    droppable: true,
    editable: true,
    header:
      left: '',
      center: 'title',
      right: 'month,agendaWeek,agendaDay'
    eventsSources: '/activities',
    eventDrop: (event, dayDelta, minuteDelta, allDay, revertFunc) ->
      $.ajax
        url: '/activities/update_activities'
        type: 'post'
        data: id: event.id
        dataType: 'json'
        success: (response) ->
          console.log 'response'
    drop: (date) ->
      id_ac = $(this).data('ac')
      $.ajax
        url: '/activities/update_activities'
        type: 'post'
        data: start: date, id: id_ac
        dataType: 'json'
        success: (response) ->
          console.log 'response'
      $(this).remove();
$(document).ready ->
  $('#calendar_now').fullCalendar
    droppable: true,
    editable: true,
    header:
      left: '',
      center: 'title',
      right: 'month,agendaWeek,agendaDay'
    eventSources: [{
      url: '/activities',
    }],
    eventDrop: (event, delta) ->
      $.ajax
        url: '/activities/update'
        type: 'put'
        data: id_ac_data: event.id, start: event.start.format()
        dataType: 'json'
        success: (response) ->
          console.log 'response'
    drop: (start) ->
      id_ac = $('#ac_id').data('ac')
      $.ajax
        url: '/activities/update'
        data:
          start: start.format()
          id_ac_data: id_ac
        type: 'put'
        dataType: 'json'
        success: (response) ->
          console.log 'response'
      $(this).remove();
我的活动控制器

class ActivitiesController < ApplicationController
  def index
    @activities = Activity.where(user_id: current_user)
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: ([@activities]) }
    end
  end

  def update_activities
    @activity = Activity.find(params[:id])
    @activity.starts_at = params[:start]
    @activity.save

  end
end
类活动控制器
我在我的应用程序中使用了较旧版本的FullCalendar,因此这可能不是绝对正确的,但以下是一些建议:

  • update\u活动
    控制器操作应称为
    update
    ,并且应为
    put
    而不是
    post
  • 您正在更新活动,但没有创建新的活动,因此
    类型:“post”
    应该是
    类型:“put”
  • 看起来您的
    drop:(date)->
    函数从未调用过
  • 如果您使用的是最新版本的FullCalendar,则
    eventDrop:(event、dayDelta、minuteDelta、allDay、revertFunc)->
    函数看起来有误。签名为
    函数(event、delta、revertFunc、jsEvent、ui、view){}
    。三角洲是一个物体
  • 您的数据缺少事件开始,因此
    数据:id:event.id
    应该是
    数据:id:event.id开始:event.start

  • 可能的解决方案

    这样做效果很好。多亏了约瑟夫

    我的更新文件

    咖啡脚本文件

    $(document).ready ->
      $('#calendar_now').fullCalendar
        droppable: true,
        editable: true,
        header:
          left: '',
          center: 'title',
          right: 'month,agendaWeek,agendaDay'
        eventsSources: '/activities',
        eventDrop: (event, dayDelta, minuteDelta, allDay, revertFunc) ->
          $.ajax
            url: '/activities/update_activities'
            type: 'post'
            data: id: event.id
            dataType: 'json'
            success: (response) ->
              console.log 'response'
        drop: (date) ->
          id_ac = $(this).data('ac')
          $.ajax
            url: '/activities/update_activities'
            type: 'post'
            data: start: date, id: id_ac
            dataType: 'json'
            success: (response) ->
              console.log 'response'
          $(this).remove();
    
    $(document).ready ->
      $('#calendar_now').fullCalendar
        droppable: true,
        editable: true,
        header:
          left: '',
          center: 'title',
          right: 'month,agendaWeek,agendaDay'
        eventSources: [{
          url: '/activities',
        }],
        eventDrop: (event, delta) ->
          $.ajax
            url: '/activities/update'
            type: 'put'
            data: id_ac_data: event.id, start: event.start.format()
            dataType: 'json'
            success: (response) ->
              console.log 'response'
        drop: (start) ->
          id_ac = $('#ac_id').data('ac')
          $.ajax
            url: '/activities/update'
            data:
              start: start.format()
              id_ac_data: id_ac
            type: 'put'
            dataType: 'json'
            success: (response) ->
              console.log 'response'
          $(this).remove();
    
    活动内索引控制器

    respond_to do |format|
     format.html # index.html.erb
     format.json { render json: @activities }
    end
    
    未捕获的TypeError:无法读取未定义的属性“\u calendar”,这是因为我在数组中呈现json。。。但是@activities已经是一个数组了


    无论如何,谢谢:)

    谢谢你的回答JosephL:)我做了更改,但我认为3)是主要问题,因为当我删除控制台中的活动时,我得到了未捕获的类型错误:无法读取未定义的属性“\u calendar”