0

ember-data に実装されたテストによると、hasMany リレーションシップから子レコードを要求すると、ストアは子リソース URL への get GET を作成し、必要な子リソースの ID を送信します。

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 ] });

親レコード (グループ) の ID も送信するにはどうすればよいですか? 私のサーバーは、埋め込まれたレコードを取得するためにこの ID を必要とします。次のようなものが必要です:

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

1 に答える 1

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

(ここでは、わかりやすくするために、既存のインスタンスのセット全体が返されます。結果は、要求された ID に従ってフィルタリングする必要があります...)

于 2012-07-18T14:00:22.457 に答える