ユーザーにフラグ (ハッシュタグ) を項目に追加してもらいたいシステムがあります。ここに私のモデルがあります:
Social.Item = DS.Model.extend({
source: DS.belongsTo ('source'),
url: DS.attr (),
post_timestamp: DS.attr(),
summary: DS.attr(),
item_flags: DS.hasMany('item_flag', {async: true})
});
Social.Flag = DS.Model.extend({
kind: DS.attr(),
name: DS.attr(),
item_flags: DS.hasMany('item_flag', {async: true})
});
Social.ItemFlag = DS.Model.extend({
item: DS.belongsTo('item', {async: true}),
user: DS.belongsTo('user', {async: true}),
flag: DS.belongsTo('flag', {async: true}),
});
関連するハンドルバーのコードは次のとおりです。
{{#each item in site.sorted_items itemController="item"}}
{{{item.summary}}}
{{#each item_flag in item.item_flags}}{{item_flag.flag}}*FF*{{/each}}
{{/each}}
システムはアイテムごとにいくつかのFFタグを出力します - データベースには間違いなく item_flag 要素があり、REST エンドポイントでの呼び出しを確認できます - システムはデータベースから item_flags を要求しています。belongsTo 関係の反対側にあるオブジェクトは、ここでは利用できないようです。このコードを含むように ItemFlag モデルを拡張してみました:
flag_string: function() {
return this.get('flag').then(function (data) {return data.get('name')});
}.property('flag')
しかし、それは NPE をスローするだけです - ItemFlag モデルの this.get('flag') は null を返します。アダプターで定義された「embed: always」について言及されているようですが、(a) それは pre-ember-data-beta の時代のものであり、(b) 役に立ちませんでした (また、私の記録はそうではありません)。埋め込み)。
ここで一般的にやりたいことは、データベース内のリレーションシップによって定義されたモデルの親モデルをどのように見るかを理解することです。