2016-01-15 3 views
1

Я пытаюсь привлечь участников к нескольким целевым аудиториям, связанным с проверкой, и когда я просматриваю конкретное сканирование, это показывает мне, что участник подсчитывает отношение к целевой аудитории из всех сканирований вместо этого участник подсчитывает отношение к целевой аудитории этого конкретного сканирования.Проблемы с множественными отношениями в одной модели

У меня есть следующие модели:

  • сканы
  • участников
  • targetAudience
  • scanParticipants (Делает связь между «сканирование», «участник» & «targetAudience», он также имеет некоторые дополнительные данные [сводная таблица, это то, что они называют это i)]

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('[email protected]', 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; 

целевой audience.js модель:

import DS from 'ember-data'; 

var targetAudienceModel = DS.Model.extend({ 
    scanParticipants:   DS.hasMany('scanParticipants', {async: true}), 
    participants:    Ember.computed('scanParticipan[email protected]', 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; 

скан-участник.js модель:

импорт DS из 'ember-data';

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)
  • scan 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 данных
  • Эмбер 2.1.0

Спасибо заранее!

Незлые С уважением,

Pascal

ответ

0

Я решил эту проблему !!

Я толкаю каждый targetAudience в компоненте scan-stats-target, В компоненте я сделал вычисленное свойство 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'); 
}) 

так просто, я думаю, я работал на долго это я не мог думать просто больше = х !

Кто-то не понимает это, просто спрашивайте меня, и я попытаюсь ответить на него!

Смежные вопросы