2013-02-28 4 views
1

Это вопрос, касающийся моего понимания.Данные Ember имеют много отношений

В рельсах, когда вы устанавливаете связь has_many-belongs_to между двумя моделями, родительским и дочерним, идентификатор хранится только для детей. Если вы хотите найти родителя ребенка, база данных запрашивается с использованием идентификатора для дочернего элемента. Чтобы найти всех детей-родителей, запрашивается база данных для всех записей с parent_id, соответствующими текущему родительскому элементу. Rails - это мой backend, так что это то, с чем взаимодействуют данные ember-данных.

Кажется, что ассоциации в данных ember должны быть установлены в обоих направлениях, и идентификаторы должны существовать на обеих моделях. Модель с отношением has_many должна иметь массив, содержащий его идентификаторы для детей. Однако это не сохраняется на стороне сервера.

Клиентская сторона с использованием ember, мне нужно иметь возможность перечислить родительских детей. Тем не менее, я не могу получить доступ к этому без итерации по всем детям для каждого родителя.

Здесь есть фундаментальное несоответствие, и я просто хочу убедиться, что я правильно применяю свое приложение. Должен ли мой ajax возвращать массив идентификаторов с каждым родителем или должен ли я заполнять их на стороне клиента?

ответ

4

Включая массив ids для связи hasMany в вашем JSON, строго говоря, по желанию. На практике это важно, потому что без него Ember-Data сможет найти только те связанные записи, которые уже были загружены.

Например, если у вас есть

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

App.Comment = DS.Model.extend({ 
    post: DS.belongsTo('App.Post') 
}); 

и опустить comment_ids массив в post JSON, то вам нужно будет вручную вызвать App.Comment.find(), чтобы загрузить все комментарии перед тем post.get('comments') будет гарантированно содержать все комментарии, связанные с данным post.

Если вы включили массив comment_ids в JSON для post, то Ember-Data сделает последующий запрос на комментарии, которые он еще не загрузил.

+0

Хорошо, поэтому настройка ответа JSON на включение идентификаторов кажется достаточно прямой вперед. Как насчет сохранения обратно на сервер? Будет ли клиент отправлять массив комментариев просто для игнорирования или вы можете его не отправлять? –

+1

По умолчанию Ember-data включает в себя массив комментариев, только если связь сконфигурирована как встроенная в сериализатор. Взгляните на [этот вопрос] (http://stackoverflow.com/questions/15138219/ember-data-saving-a-relationship/15145803#15145803) для получения дополнительной информации. – ahmacleod

+0

Отлично. Поэтому, как всегда, по умолчанию кажется, что я уже делаю то, что мне нужно. Три дня в ember (и данные) и должны сказать, что я люблю его. –

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