Как получить идентификатор parentRecord с данными Ember

Согласно тесту, реализованному в ember-data, когда мы запрашиваем дочерние записи из отношения hasMany, хранилище выполняет GET для получения URL-адреса дочерних ресурсов и отправляет идентификаторы необходимых дочерних ресурсов.

test("finding many people by a list of IDs", function() {
  store.load(Group, { id: 1, people: [ 1, 2, 3 ] });

  var group = store.find(Group, 1);

  equal(ajaxUrl, undefined, "no Ajax calls have been made yet");

  var people = get(group, 'people');

  equal(get(people, 'length'), 3, "there are three people in the association already");

  people.forEach(function(person) {
    equal(get(person, 'isLoaded'), false, "the person is being loaded");
  });

  expectUrl("/people");
  expectType("GET");
  expectData({ ids: [ 1, 2, 3 ] });

Как я могу также отправить идентификатор родительской записи (группы)? Моему серверу нужен этот идентификатор для извлечения встроенной записи. Нужно что-то вроде:

expectData({groud_id: the_group_id, ids: [1,2,3] })

person jrabary    schedule 30.04.2012    source источник


Ответы (1)


У вас нет возможности передать дополнительные параметры, и на сегодняшний день ожидается, что ресурсы находятся «в корне». Это означает, что в вашем config/routes.rb:

resources :organization
resources :groups
resources :people

Вы можете испугаться с первого взгляда: «Боже мой, я теряю изоляцию данных...», но на самом деле эта изоляция, в конце концов, обычно обеспечивается реляционными соединениями, начиная с предка, владеющего вложенными вещами. В любом случае, эти объединения могут быть выполнены ORM по (разумной) цене, чтобы объявить любой листовой ресурс в предке.

Предполагая, что вы используете RoR, вы можете добавить реляционные ярлыки в свои модели, чтобы обеспечить изоляцию вложенных ресурсов, подобную этой (пожалуйста, обратите внимание has_many ... through ... что важно)< /эм>:

class Organization < ActiveRecord::Base
  has_many :groups
  has_many :people, through: groups
end

class Group < ActiveRecord::Base
  has_many :people
end

Затем в ваших контроллерах напрямую используйте ярлыки, объединенные в вашей модели корневого держателя (здесь Organization):

class GroupsController < ApplicationController
  def index
    render json: current_user.organization.groups.all, status: :ok
  end
end

class PeopleController < ApplicationController
  def index
    render json: current_user.organization.people.all, status: :ok
  end
end

(Здесь для большей ясности возвращаются полные наборы существующих экземпляров. Результат должен быть отфильтрован в соответствии с запрошенными идентификаторами...)

person Mike Aski    schedule 18.07.2012