2012-04-30 10 views
0

ember-dataで実装されているテストによれば、hasMany関係から子レコードを要求すると、ストアは子リソースにGET get URLを作成し、必要な子リソースのIDを送信します。emberデータでparentRecord 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] }) 

答えて

1

追加パラメータを渡す方法はありません。今日の時点では、リソースは「at root」になると予想されます。それはあなたのconfig/routes.rbで、意味:

resources :organization 
resources :groups 
resources :people 

あなたが「... OMG、私はデータの分離を失うのです」、一見怖いことができ、実際には、この分離は、最終的には通常、加入関係によって提供され、から始まりますネストされたものを所有する祖先。とにかく、これらの結合は、ORMによって、祖先の任意のリーフリソースを宣言する(妥当な)価格で実行することができる。

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

class Group < ActiveRecord::Base 
    has_many :people 
end 

:あなたがRoRのを使用している、あなたはその(重要なものであるhas_many ... through ...に注意してください)のようなネストされたリソースの分離を確実にするために、あなたのモデルに関係のショートカットを追加することができますと仮定

あなたのコントローラーで、ルートホルダーモデル(ここでは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に従ってフィルタリングする必要があります...)

関連する問題