我有一个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
答案 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)
,现在它正在运行。