5

次のようなレコードを作成しようとすると

var myObject = App.ModelName.createRecord( data );
myObject.get("transaction").commit();

myObject の id は設定されません。

これは、ID 生成が EmberData によって処理される必要があることを示しています (最初の応答)。では、何が起こっているはずですか?新しい ID はどこで決定されますか。有効な ID を取得するために API へのコールバックが必要ではありませんか?

4

2 に答える 2

2

Firebaseなどの一部の REST アダプターでは、作成するレコードの変数として id を定義できます。

App.User = DS.Model.extend({
  firstName: DS.attr('string')
});

var sampleUser = model.store.createRecord('user', {
  id: '4231341234891234',
  firstName: 'andreas'
});

sampleUser.save();

データベース内の JSON (Firebase)

"users": {
  "4231341234891234": {
    "firstName": "andreas"
  }
}
于 2014-08-28T14:10:53.430 に答える
2

ID は、Ember ではなくデータベースによって作成されるレコードの主キーです。これは JSON 構造で REST 投稿に送信されます。ID がないことに注意してください。

{"post":{"title":"c","author":"c","body":"c"}}

REST Post 関数で、最後の挿入 ID を取得し、次の JSON 構造を使用して残りのモデル データと共にそれを Ember に返す必要があります。ID に注意してください。これは最後の挿入 ID です。DB API を使用して、最後の挿入 ID を手動で取得する必要があります。

{"post":{"id":"20","title":"c","author":"c","body":"c"}}

これは、REST 投稿のサンプル コードです。PHP REST Slim フレームワークを使用してこれをコーディングしました。

$app->post('/posts', 'addPost'); //insert new post

function addPost() {
    $request = \Slim\Slim::getInstance()->request();
    $data = json_decode($request->getBody());

    //logging json data received from Ember!
    $file = 'json1.txt';
    file_put_contents($file, json_encode($data));
    //exit;

    foreach($data as $key => $value) {
        $postData = $value;
    }

    $post = new Post();
    foreach($postData as $key => $value) {

        if ($key == "title")
            $post->title = $value;

        if ($key == "author")
            $post->author = $value;

        if ($key == "body")
            $post->body = $value;   
    }

    //logging
    $file = 'json2.txt';
    file_put_contents($file, json_encode($post));

    $sql = "INSERT INTO posts (title, author, body) VALUES (:title, :author, :body)";

    try
    {
        $db = getConnection();
        $stmt = $db->prepare($sql);
        $stmt->bindParam("title", $post->title);
        $stmt->bindParam("author", $post->author);
        $stmt->bindParam("body", $post->body);
        $stmt->execute();

        $insertID =  $db->lastInsertId(); //get the last insert ID
        $post->id = $insertID;

        //prepare the Ember Json structure
        $emberJson = array("post" => $post);

        //logging
        $file = 'json3.txt';
        file_put_contents($file, json_encode($emberJson));

        //return the new model back to Ember for model update
        echo json_encode($emberJson);
    }
    catch(PDOException $e)
    {
        //$errorMessage = $e->getMessage();
        //$data = Array(
        //  "insertStatus" => "failed",
        //  "errorMessage" => $errorMessage
        //);
    }
}
于 2014-08-27T23:52:47.840 に答える