rails4从fullcalendar访问控制器中的params(第三方API)

时间:2016-01-02 23:35:25

标签: ruby-on-rails json parameters fullcalendar

我有一个rails4应用程序,我正在尝试将其与fullcalendar集成。仅从db获取显示的事件我正在尝试使用params['start']params['end]作为我的between_time范围。如果我检查start和end params的值,控制台会说值为nil。这很奇怪,因为在日志中我可以看到它们的json请求。那为什么没有?我该怎么做才能将它们用于我的范围?

控制器

@user = current_user
@event = Event.new
@events = Event.allevents(current_user).between_time(params['start'], params['end']) if (params['start'] && params['end'])
respond_to do |format|
  format.html
  format.json { render: @events }
end

登录服务器

Started GET "/users/1/events" for ::1 at 2016-01-02 15:05:31 -0800
15:05:31 puma.1       | Processing by EventsController#index as HTML
15:05:31 puma.1       |   Parameters: {"user_id"=>"1"}

Started GET "/users/1/events?start=2015-12-27&end=2016-01-03&_=1451775933354" for ::1 at 2016-01-02 15:05:34 -0800
15:05:34 puma.1       | Processing by EventsController#index as JSON
15:05:34 puma.1       |   Parameters: {"start"=>"2015-12-27", "end"=>"2016-01-03", "_"=>"1451775933354", "user_id"=>"1"}

以下代码是我检查过的示例应用。在这段代码中,params似乎正常工作。在获取参数时,我没有看到与我的代码相比的差异。

def get_events
  start_time = Time.at(params[:start].to_i).to_formatted_s(:db)
  end_time   = Time.at(params[:end].to_i).to_formatted_s(:db)

  @events = Event.where('
              (starttime >= :start_time and endtime <= :end_time) or
              (starttime >= :start_time and endtime > :end_time and starttime <= :end_time) or
              (starttime <= :start_time and endtime >= :start_time and endtime <= :end_time) or
              (starttime <= :start_time and endtime > :end_time)',
              start_time: start_time, end_time: end_time)
  events = []
  @events.each do |event|
    events << { id: event.id,
                title: event.title,
                description: event.description || '', 
                start: event.starttime.iso8601,
                end: event.endtime.iso8601,
                allDay: event.all_day,
                recurring: (event.event_series_id) ? true : false }
  end
  render json: events.to_json
end

2 个答案:

答案 0 :(得分:0)

当你实际上是字符串时,你试图将它们作为符号访问

params[:start]

需要替换为

params["start"]

答案 1 :(得分:0)

搞定了。我忘了这些params只有在fullcalendar加载html后发送一个AJAX请求时才可用。我的问题是日期/时间格式。 Time.at(params['start'].to_i).to_formatted_s(:db)对我不起作用。我不知道为什么,也许fullcalendar API已经改变了。发送的当前格式为Parameters: {"start"=>"2015-12-27".....,因此我将代码更改为params['start'].to_datetime.to_formatted_s(:db),现在它正在运行。