2016-06-16 7 views
0

REST APIからデータを取得するルートがあります。ユーザーが初めて入力すると、データは保存されません。そのため、デフォルト値でレコードを作成する必要があります。私はこのルートでこれを行う必要があると思うので、ユーザはsaveアクション中に作成するのではなく、私のデフォルト値(私の実際のアプリケーションではnullではない)を見ることができます。Ember:見つからない場合は新しいレコードを作成する

ただし、データベースにデータがある場合は、そのレコードを返す必要があります。今、私は立ち往生していて、何か正しいことをしてはならない(恐らく約束と関係しているが、わからない)。

私が手にエラーがある:のようなので、

var project = this.modelFor('project'); 
var projectDates = this.store.find('project-date', project.id); 
if (projectDates) { 
    return projectDates; 
} else { 
    return this.store.createRecord('project-date', { 
    project: project.id, 
    start: null, 
    checkpointA: null, 
    finish: null 
    }; 
} 

不可解な事は、私はちょうど、他の戻り値を得るために、私if文を否定した場合ということです(:

Error while processing route: project.dates Assertion Failed: 
Expected an object as `data` in a call to `push` for [email protected]:project-date: , 
but was undefined 

は、ここに私の経路コードです:if (!projectDates))私はまだ上記のエラーが表示されますが、モデルも読み込まれます!私は、API(または私のモックAPI)がオブジェクトとして適切な形式でデータを返すことを確認しました。

+0

あなたの代わりに(「プロジェクト日付」検索中とcreateRecordで単数化モデル名を使用してはいけません'project-dates')?おそらく、 –

+0

。私はちょうど編集しました。名前が他の誰にも意味をなさないので、私は実際のコードから再入力しました。 – redOctober13

+0

APIは適切なJSON API形式でデータを返しますか?あなたのAPI呼び出しのルートにあるべき 'data'オブジェクトがないので、あなたの呼び出しがデータを返して実際にエラーを引き起こしているようです。 – Nazim

答えて

1

私が疑ったように、私はこれを解決するために約束のものを使うことができました。ちょうど私が正しいアイデアを揺さぶるようなものを見つけるまで、グーグルを続ける必要がありました。ここで

が見つかりました。レコードにモデルを設定するか、あるいは新しいレコードを作成する方法である:

model: function() { 
    var project = this.modelFor('project'); 
    var projectDates = this.store.find('project-date', project.id).catch(function() { 
    return this.store.createRecord('project-date', { 
     project: project.id, 
     start: null, 
     checkpointA: null, 
     finish: null 
    }; 
    }); 
    return projectDates; 
} 
関連する問題