一个模型中多个关系的问题

时间:2016-01-15 09:35:46

标签: ember.js

我正在尝试让参与者了解与扫描相关的一些目标受众,当我查看特定扫描时,它显示我的参与者计数与所有扫描的目标受众相关而不是参与者计数与特定扫描的目标受众有关。

我有以下型号:

  • 扫描
  • 参与者
  • targetAudience
  • scanParticipants(制作“扫描”,“参与者”和“targetAudience”之间的关系,它还有一些额外的数据[数据透视表,他们称之为我的所谓])

scan.js型号:

import DS from 'ember-data';

var scanModel = DS.Model.extend({
    targetAudiences:             DS.hasMany('targetAudiences', {async: true}),
    scanParticipants:            DS.hasMany('scanParticipants', {async: true}),
    participants:                Ember.computed('scanParticipants.@each.participant', function () {
        return this.get('scanParticipants').then(function (scanParticipants) {
            return scanParticipants.mapBy('participant');
        })
    }),
    participantsCount:           Ember.computed('scanParticipants.[]', function () {
        return this.get('scanParticipants.length');
    }),
    participantsCountFinished:   Ember.computed('scanParticipants.[]', function () {
        return this.get('scanParticipants').filterBy('finished', true).get('length');
    }),
});

export default scanModel;

target-audience.js模型:

import DS from 'ember-data';

var targetAudienceModel = DS.Model.extend({
    scanParticipants:            DS.hasMany('scanParticipants', {async: true}),
    participants:                Ember.computed('scanParticipants.@each.participant', function () {
        return this.get('scanParticipants').then(function (scanParticipants) {
            return scanParticipants.mapBy('participant');
        })
    }),
    participantsCount:           Ember.computed('scanParticipants.[]', function () {
        return this.get('scanParticipants.length');
    }),
    participantsCountFinished:   Ember.computed('scanParticipants.[]', function () {
        return this.get('scanParticipants').filterBy('finished', true).get('length');
    }),
});

export default targetAudienceModel;

scan-participant.js模型:

从'ember-data'导入DS;

var scanParticipantModel = DS.Model.extend({
    finished:       DS.attr('boolean'),
    scan:           DS.belongsTo('scan',           {async: true}),
    participant:    DS.belongsTo('participant',    {async: true}),
    targetAudience: DS.belongsTo('targetAudience', {async: true})
});

export default scanParticipantModel;

如果我要去一个特定的scangroup,它会向我显示该scangroup的扫描列表,这是很好的例子:

url scangroup/1

  • 扫描1(参与者数:14,参与者完成:8)
  • 扫描2(参与者数:14,参与者完成:4)

现在,当我要进行特定扫描时,我想显示属于扫描的每个targetAudience的统计信息,我选择示例:

url scangroup/1/scan/2

  • targetAudience 1(参与者数:4,参与者完成:1)
  • targetAudience 2(参与者数:2,参与者完成:1)
  • targetAudience 3(参与者数:4,参与者完成:0)
  • targetAudience 4(参与者数:4,参与者完成:2)

但是当我查看特定扫描(2)时,我得到的统计数据是:

  • targetAudience 1(参与者数:8,参与者完成:3)
  • targetAudience 2(参与者数:4,参与者完成:4)
  • targetAudience 3(参与者数:8,参与者完成:1)
  • targetAudience 4(参与者数:8,参与者完成:4)

如果我在扫描2时看到它只显示与该目标扫描2相关的参与者数量,我怎么能成为可能呢?

我无法弄明白,我已经3天尝试了一切,但似乎不可能。

我正在使用:

  • Ember 2.1.0
  • Ember data 2.1.0

提前致谢!

请问,

帕斯卡

1 个答案:

答案 0 :(得分:0)

我已经解决了问题!!

我正在推动组件scan-stats-target中的每个targetAudience, 在组件中我创建了计算属性participantsCount

participantsCount: Ember.computed('targetAudience', function () {
    let scanId           = this.get('scan.id');
    let scanParticipants = this.get('targetAudience.scanParticipants');

    return scanParticipants.filterBy('scan.id', scanId).get('length');
})

这么容易,我想我已经努力了,我再也不能想到了简单= x!

有人不理解它只是质问我,我试着回答它!