В моем Ember-маршрутизаторе настроен этот тип родительского/дочернего ресурса.
this.resource("cities", function(){
this.resource("city", { path: ':city_id'});
});
В бэкенде (то есть Rails) существует связь has_many между City.rb и Restaurant.rb, а в Active Model Serializer (AMS) для City я также объявляю связь has_many с Restaurants. В AMS при объявлении отношений вы можете сделать что-то вроде этого
embed :ids, include: true
так что включены только «идентификаторы» дочерней модели (в моем случае ресторана). Я не этого не делал. Поэтому я получаю все атрибуты ресторана для каждого города, когда делаю ajax-запрос findAll для модели City.rb. Это означает, что в шаблоне города я могу отобразить название каждого ресторана и т. д., потому что все данные о ресторане находятся под рукой.
<script type="text/x-handlebars" id="city">
{{ model.name }}//city name
{{#each item in model.restaurants}}
<li>
{{#link-to 'restaurant' item}}{{ item.name }}{{/link-to}}
</li>
{{/each}}
</script>
Тем не менее, я читал, что в Ember рекомендуется вставлять идентификаторы только для дочерних моделей (в моем случае ресторана) embed :ids, include: true
, что означает, что название ресторана не будет доступно в приведенном выше шаблоне.
Мой вопрос заключается в следующем: если я делаю embed :ids, include: true
, когда я показываю шаблон для каждого города, какой смысл иметь только id
? Это означает, что я не мог отобразить список ресторанов для каждого города, а если бы я хотел их показать, мне пришлось бы запрашивать отдельно для каждого города.
Если это так, каков вариант использования embed :ids, include: true
в Active Model Serializer с Ember. Есть ли способ, которым я мог бы использовать его в этом контексте, чтобы сделать код более эффективным?
Код
Мой город метод findAll
App.City.reopenClass({
findAll: function() {
return $.getJSON("cities").then(
function(response) {
console.log(response);
var links = Em.A();
response.cities.map(function (attrs) {
links.pushObject(App.City.create(attrs));
});
console.log(links);
return links;
}
);
},
});
Шаблон города
<script type="text/x-handlebars" id="cities">
<div class='span4'>
{{#each item in model}}
<li> {{#link-to 'city' item}}
{{ item.name }}
{{/link-to }}</li>
{{/each}}
</ul>
</div>
<div class="span4 offset4">
{{ outlet}}
</div>
</script>
Шаблон city, в котором также показаны рестораны.
<script type="text/x-handlebars" id="city">
{{ model.name }} //city name
{{#each item in model.restaurants}}
<li>
{{#link-to 'restaurant' item}}{{ item.name }}{{/link-to}}
</li>
{{/each}}
</script>