Параметр пути к ресурсу не передается в Route

Почему-то параметр user_id не передается моему UserIndexRoute. Что может пойти не так?

Ошибка, которую я получаю в результате,

Утверждение не выполнено: вы не можете передавать undefined в качестве идентификатора методу поиска магазина.

  • Запрос /users/1
  • Пользователь с идентификатором 1 действительно существует в своих моделях.
  • В моем приложении нет других ошибок, маршрут пользователей работает и показывает данные прибора для пользователя.

router.js

var Router = Ember.Router.extend({
  location: DaappEmber2ENV.locationType
});

Router.map(function() {
  this.resource('users', function(){
    this.resource('user', { path:'/:user_id' }, function(){
        this.route('edit');
    });
    this.route('create');
  });
});

экспортировать маршрутизатор по умолчанию;

маршруты/пользователь/index.js

export default Ember.Route.extend({
    model: function(params){
        Ember.Logger.debug('Params for user/index route:', params);
        return this.store.find('user', params.user_id);
    }
});

person Boyd    schedule 16.06.2014    source источник


Ответы (1)


Вы определили динамический slug, user_id на маршруте пользователей, но затем вы пытаетесь получить к нему доступ на маршруте usersindex. Дочерние маршруты не наследуют параметры своих родительских ресурсов. Создайте маршрут пользователя, и он будет доступен там.

person Kingpin2k    schedule 16.06.2014
comment
Спасибо. Меня это сбивало с толку, так как я только начал работать с Ember. Для всех остальных. Если вы определяете маршрут, например User с path: '/:user_id', маршрут с именем UserIndexRoute будет маршрутом назначения. Но все же UserRoute — это маршрут, который напрямую связан с «Пользователем», и поэтому он будет правильным маршрутом для перехвата динамической слаг user_id - person Boyd; 17.06.2014
comment
@Kingpin2k, не могли бы вы рассказать об этом подробнее, пожалуйста? Дочерние маршруты не наследуют параметры своих родительских ресурсов. Это есть в документации? Если так, то я должен прочитать это в сто первый раз! ;-) В моем случае, используя приведенный выше пример, я не могу передать параметры из маршрута «пользователь» в маршрут «редактировать», когда он вложен. - person hourback; 23.09.2014
comment
Я думаю, что более подходящим утверждением было бы их документация, показывающая, что подмаршруты получают параметры своих родительских маршрутов. Если у вас есть дочерний маршрут, вы можете просто использовать this.modelFor для захвата родительского ресурса. emberjs.com/api/classes/Ember.Route.html#method_modelFor - person Kingpin2k; 23.09.2014