2013-11-16 5 views
4

Я экспериментирую с приложением Ember с использованием данных ember-data и базового сервера node.js, обслуживающего данные MySQL, используя Sequelize.js.Node.js sequelize embed hasMany IDs

Моя проблема: Если я модель комментарий, связанный с моделью сообщение через hasMany ожидаемый JSON от Ember-данных выглядит

{ 
    "post": { 
    "comment_ids": [1, 2, 3] 
    } 
} 

Что бы лучший способ запроса/генерировать этот JSON без дорогие циклы и т. д., используя sequelize?

Модель комментария имеет внешний ключ с post_id.

ответ

2

я пошел на его реализацию нравится:

// include comments 
Post.all({ 
    where: "..", 
    include: [Comment] 
}).success(function(posts) { 
    // collect IDs 
    _.each(posts, function(element) { 
    element["comments"] = _.pluck(element.comments, 'id'); 
    }); 
}); 
+0

Откуда взялись художники? – freakTheMighty

+1

@freakTheMighty отредактирован - должно быть сообщение, которое передается обратному сообщению – Matthias

1

Я бы предложил передать доллар клиенту. Вы можете настроить клиентскую сторону пользовательского сериализатора, которая переформатирует данные в ожидаемый формат для ED. Кроме того, ED ожидает его в следующем формате:

{ 
    "post": { 
    "comments": [1, 2, 3] 
    } 
} 

App.Post = DS.Model.extend({ 
    comments = DS.hasMany('comment') 
}); 

или если вы решите включить комментарии в ответ

{ 
"post": { 
    "id": 1 
    "title": "Rails is omakase", 
    "comments": ["1", "2"], 
    "_links": { 
     "user": "/people/dhh" 
    }, 
}, 

"comments": [{ 
    "id": "1", 
    "body": "Rails is unagi" 
    }, { 
    "id": "2", 
    "body": "Omakase O_o" 
    }] 
} 

Вы можете прочитать больше об этом здесь: https://github.com/emberjs/data/blob/master/TRANSITION.md

В какой-то момент , кому-то придется зацикливать (или повторять), и это не обычная практика, чтобы перебирать ваш результирующий набор, чтобы создать ответ (или сериализовать ответную клиентскую сторону).

+0

Спасибо за ваш ответ. То, что я искал, - прекрасный способ использовать sequelize, чтобы сделать какое-то соединение, чтобы добавить в ID комментария – Matthias

Смежные вопросы