2016-05-04 5 views
0

を私はiOSのアプリのデータ同期のためのRailsのバックエンドのAPIを構築しています。場所(と比較するレールに日時を送る「> updated_atの?」

を、私は、ユーザーがiOS版で更新ボタンをタップするとアップデートされた最新のデータを取得したいですapp.これを行うには、iOS側にupdated_atを保存してから、updated_atパラメータで呼び出しを呼び出すと送信します。

しかし、このコードがRails側では機能しない理由はわかりません。

@Railsエントリーコントローラー

# 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 
私は2016-05-02T01の日付を変更しても @Sending RailsのDatatime形式は動作しませんでした

は...

https://server.com/api/v1/entries?updated_at=2016-05-02T01:12:57.204Z 

:12:57.204Z昨日まで私は1分前に​​いくつかのエントリを更新した後、私は空のデータだけを取得します。

これは、このようなパラメータなしで正常に動作します。

https://server.com/api/v1/entries 

ありがとうございます。

+0

きれいで整頓されたパラメータの場合、 'Time.now.to_i'エポック形式を使用することができます。次に: 'どこ( 'updated_at>?'、Time.at(params [:updated_at]))' – tadman

答えて

2

updated_atの入力値をstringからDateTimeに変換することをお勧めします。標準のRailsタイムスタンプを使用していると仮定すると、データベースは精度とパフォーマンスの両方について日付と日付の比較を行うことができます。ここで

が更新された日付の比較コードです:

entries = entries.where("updated_at > ?", DateTime.parse(updated_at)) 

は、着信日時書式が安定していると仮定すると、これはあなたが期待通りに動作するはずです。日時書式が変更される可能性があると思われる場合、または受け入れるものに柔軟性を持たせたい場合は、のように、より堅牢な日付パーサーを呼び出すようにDateTime.parseを変更することを検討してください。

最後の1点:代替クエリで起きているように、日付クエリでdeletedをフィルタリングするつもりでしたか?ソフト削除機能を実装している場合は、エンドユーザーの混乱を防ぐのに役立ちます。

+0

ありがとう!私の期待通りに機能します! >>削除はい、ソフト削除のために削除を設定しました。「それはエンドユーザーの混乱に役立つかもしれません」という意味ですか?どういう意味ですか? –

+0

聞いてうれしい!最後の声明が意味することは、日付フィルタなしのエントリをリストし、削除されていないレコードのみを表示するとエンドユーザー(iOSユーザー)が混乱する可能性がありますが、フィルタリングの日付を指定すると、ショー。私は、日付フィルタロジックにソフト削除のフィルタを追加すると、それらの削除されたレコードが返されないようにしなければならないことを意味します。 –

+0

私は参照してください。ユーザーがログインしたときにのみupdated_atパラメーターなしでデータフェッチを使用するので、アクティブなデータのみが送信されます。ユーザーが更新をタップすると、updated_atでデータが取得されるため、iOSアプリは削除された情報をフェッチして正しく更新できます。それは理にかなっていますか? –

2

明日まで時間を変更している場合は、将来的にエントリを追加するタイムマシンを用意することをおすすめします。時間を昨日に設定してみてください。

2

質問には誤植がありますが、クエリパラメータには2つの疑問符(??updated_at=2016-05-02T01:12:57.204Z)が表示されています。サニティチェックとして、paramsに必要なキーが含まれていることを確認します。