将日期时间发送到Rails以与where进行比较(“updated_at>?”

时间:2016-05-04 02:37:40

标签: ios ruby-on-rails ruby

我正在为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

任何建议都将不胜感激,谢谢!

3 个答案:

答案 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,就像在后备查询中发生的那样。如果您已经实施了一些软删除功能,那么这可能有助于防止最终用户混淆。