我正在为iOS应用数据同步构建Rails后端api。
当用户点按iOS应用中的刷新按钮时,我想获取最新的更新数据。为此,我在iOS端保存了Rails updated_at,然后在我使用updated_at参数调用get调用时发送它。
但是,我不知道为什么这个代码在Rails端不起作用。
@Rails EntriesControllers
# GET /entries
def index
entries = current_user.entries
updated_at = params[:updated_at]
# Filter with updated_at for reloading from mobile app
if updated_at.present?
entries = entries.where("updated_at > ?", updated_at)
# Get all non deleted objects when logging in from mobile app
else
entries = entries.where(deleted: false)
end
render json: entries
end
@Sending Rails Datatime格式不起作用..
https://server.com/api/v1/entries?updated_at=2016-05-02T01:12:57.204Z
即使我在1分钟前更新一些条目后将2016-05-02T01:12:57.204Z的日期更改为昨天,我只会获得空数据。
没有像这样的参数,它可以正常工作。
https://server.com/api/v1/entries
任何建议都将不胜感激,谢谢!
答案 0 :(得分:2)
如果您将时间更改为明天,那么您最好有一台时间机器来放置条目。尝试将时间设置为昨天。
答案 1 :(得分:2)
您的问题可能是拼写错误,但您的查询参数中似乎有两个问号:params
。作为完整性检查,请确认change()
包含您想要的密钥。
答案 2 :(得分:2)
我建议将updated_at
的传入值从string
转换为DateTime
。假设您正在使用标准Rails时间戳,这将允许数据库对准确性和性能进行日期和日期比较。
这里是更新的日期比较代码:
entries = entries.where("updated_at > ?", DateTime.parse(updated_at))
假设传入的日期时间格式保持稳定,这应该像您期望的那样工作。如果您认为日期时间格式可能会发生变化,或者您希望在接受的内容中更灵活,请考虑将DateTime.parse
更改为更强大的日期解析器,例如{{3} }。
最后一点:您是否打算在日期查询中过滤deleted
,就像在后备查询中发生的那样。如果您已经实施了一些软删除功能,那么这可能有助于防止最终用户混淆。