フロントエンドでEmberjsを使用して単純なアプリケーションを構築しようとしていますが、データベーステーブルのJSON表現を返すRESTfulサーバーがサーバー上で実行されています。
データベースには、ユーザー、アカウント、トランザクションの3つのテーブルがあります。このアプリケーションは、銀行口座のように機能します。ユーザーhasManyアカウント、アカウントはユーザーに属し、hasManyトランザクション、トランザクションはアカウントに属します。
私のモデルはこのように記述されています
// Models
App.Store = DS.Store.extend({
revision: 11,
adapter: DS.RESTAdapter.create({
url: 'http://api.mydomain.ca'
})
});
App.User = DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
accounts: DS.hasMany('App.Account')
});
App.Account = DS.Model.extend({
ownedBy: DS.belongsTo('App.User'),
transactions: DS.hasMany('App.Transaction')
});
App.Transaction = DS.Model.extend({
account: DS.belongsTo('App.Account'),
amount: DS.attr('number'),
description: DS.attr('string'),
timestamp: DS.attr('date')
});
私のコントローラー:
//Controllers
App.UserController = Ember.ObjectController.extend();
App.AccountsController = Ember.ArrayController.extend();
App.TransactionsController = Ember.ArrayController.extend();
と私のルート:
// Router
App.Router.map(function() {
this.resource('users', function() {
this.resource('user', {path:':user_id'});
}); // '/#/users/:user_id'
});
App.IndexRoute = Ember.Route.extend({
redirect: function() {
this.transitionTo('users');
}
});
App.UsersRoute = Ember.Route.extend({
model: function() {
return App.User.find();
}
});
App.UserRoute = Ember.Route.extend({
model: function(params) {
return App.User.find(params.user_id);
},
setupController: function(controller, model) {
this.controllerFor('accounts').set('model', App.Account.find({ownedBy:model.id}));
}
});
私はマスターを使用しています-詳細レイアウト。'/ users / 3'にある私のアプリケーションにアクセスすると、左側にユーザーのリストが表示され、右側にユーザー3の詳細が表示されます。詳細には、口座番号、口座残高、取引リストを表示できるようにしたいと思います。
ですから、これが私にはよくわからないことです。私のデータベースusersテーブルには、id、first_name、およびlast_nameがあります。ユーザーテーブルにアカウントのリストを保持するのではなく、アカウントとユーザーの関係をアカウントテーブルに入れるのは理にかなっています。アカウントテーブルには、idフィールドと、アカウントを所有するユーザーのIDを持つowned_byフィールドがあります。同じことが私のトランザクションテーブルにも当てはまります。アカウント内のトランザクションのリストを維持する必要はなく、トランザクションテーブルにそのトランザクションのアカウントのIDを保持するアカウントフィールドがあります。これは私にとって理にかなっている方法ですが、これがEmberがデータを期待する方法に適しているかどうかはわかりません。
これを使用して、ユーザールートのsetupControllerメソッドでアカウントをユーザーに接続できました。
this.controllerFor('accounts').set('model', App.Account.find({ownedBy:model.id}));
しかし、トランザクションをアカウントにリンクする方法がわかりません。
誰かがこれで私を助けることができますか?ありがとう :)