Nano Hash - криптовалюты, майнинг, программирование

Waterline Sails JS не работает

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

В моем контроллере я пытаюсь так:

'synchronize' : function(req,res,next){
        var owner = req.param('owner'),
            store = req.param('store'),
            items = req.param('items'),
            localCart = {
                'items' : items,
                'owner' : owner,
                'store' : store
            },
            updatedCart = {};

        // get cart first
        PosCart.findOrCreate({
            'owner' : owner,
            'store' : store
        },localCart)
        .populate('items')
        .then(function(serverCart){
            if(!serverCart) throw 'Kesalahan Sistem';

            // update server cart
            _.each(localCart.items, function(item,index){
                var _server_index = {};

                // check if product exist
                _server_index =_.findIndex(serverCart.items, function(_item){
                    return _item.product === item.product.id && 
                        _item.productCustomize === item.productCustomize.id &&
                        _.isEqual(_item.attributes,item.attributes)
                });

                // product already exist but have different quantity
                if(_server_index > -1){
                    item.quantity = (item.quantity > serverCart.items[_server_index].quantity)?
                        item.quantity : serverCart.items[_server_index].quantity ;
                    serverCart.items[_server_index]  = _.clone(item);
                }else{
                    // this is new items
                    serverCart.items.push(_.clone(item));
                }
            });

            // update cart then
            return PosCart.update(serverCart.id, serverCart);
        })
        .then(function(carts){
            if(!carts) throw 'Kesalahan Sistem';

            // return new updated cart
            // 2 level populate
            updatedCart = _.clone(carts[0]);

            return [
                PosCart.findOne(updatedCart.id).populate('items'),
                PosItem.find({'id':updatedCart.item}).populate('product'),
                PosItem.find({'id':updateCart.item}).populate('productCustomize')
            ];
        })
        .spread(function(cart,items){
            if(!cart) throw 'kesalahan sistem'

            _.each(cart.items,function(item,index){
                cart.items[index] = _.find(items,function(_item){
                    return _item.id === item.id;
                });
            });

            return res.json(cart);
        })
        .catch(function(error){
            next(error);
        });

    }

И в моей модели я пытаюсь вот так PosCart.js

attributes: {
        items : { collection : 'PosItem', via : 'cart' },
        // owner
        owner : { model : 'CrmCustomer' },
        // store referrer
        store : { model : 'SystemStore' }
    }

PosItem.js

attributes: {
        product : { model : 'PosProduct' },
        productCustomize : { model : 'PosCustomProduct' },
        variant : { model : 'PosProductVariant' },
        attributes : { type : 'json', defaultsTo : {} },
        quantity : { type : 'integer', defaultsTo : 1 },
        // owner
        cart : { model : 'PosCart' },
        wishlist : { model : 'PosWishlist' }
    }

PosItem.find({'id':updateCart.item}).populate('productCustomize') не заполняется в PosItem. Если я попытаюсь добавить в корзину свойство productcustom, например продукт, он покажет его идентификатор.

[
  {
    "product": {
      "display": "5636fe51effd3d4508d16cc8",
      "materials": [],
      "store": "5636fd43effd3d4508d16cb5",
      "name": "Penny",
      "basePrice": 250000,
      "category": "5636fe14effd3d4508d16cc7",
      "attributes": {
        "Bahan": [
          "Kulit"
        ],
        "Ukuran": [
          "38"
        ]
      },
      "desc": "Lorem ipsum dolor sit amet",
      "published": true,
      "createdAt": "2015-11-02T06:10:25.296Z",
      "updatedAt": "2015-11-02T06:10:25.395Z",
      "id": "5636fe51effd3d4508d16cc9"
    },
    "variant": {
      "name": "5636fe51effd3d4508d16cc9-Bahan:Kulit-Ukuran:38",
      "Bahan": "Kulit",
      "Ukuran": "38",
      "product": "5636fe51effd3d4508d16cc9",
      "additionalPrice": 0,
      "createdAt": "2015-11-02T06:10:25.508Z",
      "updatedAt": "2015-11-02T06:10:25.508Z",
      "id": "5636fe51effd3d4508d16cca"
    },
    "cart": {
      "store": "5632e638954e0b843f285faa",
      "createdAt": "2015-11-02T06:13:28.708Z",
      "updatedAt": "2015-11-02T06:13:28.738Z",
      "id": "5636ff08effd3d4508d16cce"
    },
    "quantity": 1,
    "attributes": {
      "Bahan": "Kulit",
      "Ukuran": "38"
    },
    "createdAt": "2015-11-02T06:13:28.757Z",
    "updatedAt": "2015-11-02T06:13:28.757Z",
    "id": "5636ff08effd3d4508d16cd0"
  },
  {
    "variant": {
      "name": "5637016deffd3d4508d16cdc-Bahan:Kulit-Soles:Outsole-Ukuran:38",
      "Bahan": "Kulit",
      "Soles": "Outsole",
      "Ukuran": "38",
      "product": "5637016deffd3d4508d16cdc",
      "additionalPrice": 25000,
      "createdAt": "2015-11-02T06:23:41.862Z",
      "updatedAt": "2015-11-02T06:24:53.995Z",
      "display": [
        {
          "zoom": "file/65e1d275-c3a7-4502-a0fe-6f5ac299d00d.jpg",
          "gallery": "file/ecbf0705-88ce-41dc-8ba2-4755041b623e.jpg",
          "thumbnail": "file/0db0e9e8-9294-4df0-b173-7d6de822786a.jpg",
          "active": true
        }
      ],
      "id": "5637016deffd3d4508d16cdd"
    },
    "cart": {
      "store": "5636fd43effd3d4508d16cb5",
      "owner": "56370d92509c2c470a3d33ac",
      "createdAt": "2015-11-02T07:15:47.026Z",
      "updatedAt": "2015-11-02T07:16:11.749Z",
      "id": "56370da3509c2c470a3d33af"
    },
    "quantity": 1,
    "attributes": {
      "Bahan": "Kulit",
      "Soles": "Outsole",
      "Ukuran": "38"
    },
    "createdAt": "2015-11-02T07:16:11.809Z",
    "updatedAt": "2015-11-02T07:16:11.809Z",
    "id": "56370dbb509c2c470a3d33b1"
  }
]

Кто-нибудь может помочь мне решить эту проблему, чтобы получить результат внизу? :)

[
  {
    "product": {
      "display": "5636fe51effd3d4508d16cc8",
      "materials": [],
      "store": "5636fd43effd3d4508d16cb5",
      "name": "Penny",
      "basePrice": 250000,
      "category": "5636fe14effd3d4508d16cc7",
      "attributes": {
        "Bahan": [
          "Kulit"
        ],
        "Ukuran": [
          "38"
        ]
      },
      "desc": "Lorem ipsum dolor sit amet",
      "published": true,
      "createdAt": "2015-11-02T06:10:25.296Z",
      "updatedAt": "2015-11-02T06:10:25.395Z",
      "id": "5636fe51effd3d4508d16cc9"
    },
    "productCustomize": {
      "display": "5636fe51effd3d4508d16dd9",
      "materials": [],
      "store": "5636fd43effd3d4508d16cb5",
      "name": "Beefroll",
      "basePrice": 250000,
      "category": "5636fe14effd3d4508d16cc7",
      "attributes": {
        "Bahan": [
          "Kulit"
        ],
        "Ukuran": [
          "38"
        ]
      },
    "variant": {
      "name": "5636fe51effd3d4508d16cc9-Bahan:Kulit-Ukuran:38",
      "Bahan": "Kulit",
      "Ukuran": "38",
      "product": "5636fe51effd3d4508d16cc9",
      "additionalPrice": 0,
      "createdAt": "2015-11-02T06:10:25.508Z",
      "updatedAt": "2015-11-02T06:10:25.508Z",
      "id": "5636fe51effd3d4508d16cca"
    },
    "cart": {
      "store": "5632e638954e0b843f285faa",
      "createdAt": "2015-11-02T06:13:28.708Z",
      "updatedAt": "2015-11-02T06:13:28.738Z",
      "id": "5636ff08effd3d4508d16cce"
    },
    "quantity": 1,
    "attributes": {
      "Bahan": "Kulit",
      "Ukuran": "38"
    },
    "createdAt": "2015-11-02T06:13:28.757Z",
    "updatedAt": "2015-11-02T06:13:28.757Z",
    "id": "5636ff08effd3d4508d16cd0"
  },
  {
    "variant": {
      "name": "5637016deffd3d4508d16cdc-Bahan:Kulit-Soles:Outsole-Ukuran:38",
      "Bahan": "Kulit",
      "Soles": "Outsole",
      "Ukuran": "38",
      "product": "5637016deffd3d4508d16cdc",
      "additionalPrice": 25000,
      "createdAt": "2015-11-02T06:23:41.862Z",
      "updatedAt": "2015-11-02T06:24:53.995Z",
      "display": [
        {
          "zoom": "file/65e1d275-c3a7-4502-a0fe-6f5ac299d00d.jpg",
          "gallery": "file/ecbf0705-88ce-41dc-8ba2-4755041b623e.jpg",
          "thumbnail": "file/0db0e9e8-9294-4df0-b173-7d6de822786a.jpg",
          "active": true
        }
      ],
      "id": "5637016deffd3d4508d16cdd"
    },
    "cart": {
      "store": "5636fd43effd3d4508d16cb5",
      "owner": "56370d92509c2c470a3d33ac",
      "createdAt": "2015-11-02T07:15:47.026Z",
      "updatedAt": "2015-11-02T07:16:11.749Z",
      "id": "56370da3509c2c470a3d33af"
    },
    "quantity": 1,
    "attributes": {
      "Bahan": "Kulit",
      "Soles": "Outsole",
      "Ukuran": "38"
    },
    "createdAt": "2015-11-02T07:16:11.809Z",
    "updatedAt": "2015-11-02T07:16:11.809Z",
    "id": "56370dbb509c2c470a3d33b1"
  }
]

  • Если у вас возникли проблемы, попробуйте Gitter Room Sails.js. Я новичок, но я нашел некоторую помощь там. Гиттер Sails.js 03.11.2015
  • Можете ли вы включить модель PosCustomProduct? 03.11.2015
  • @brittonjb Это моя PosCustomProduct ссылка 04.11.2015
  • В следующий раз попробуйте опубликовать упрощенную версию своего кода, только то, что имеет значение для вопроса. 05.11.2015

Ответы:


1

У тебя столько полей! :-)

Мое предложение найти проблему состояло бы в том, чтобы начать назад, а затем добраться туда, куда вы хотите.

Перейдите по адресу https://github.com/balderdashy/waterline-docs/blob/master/models/associations/associations.md и посмотрите, сможете ли вы заставить работать базовую модель ассоциации.

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

Удачи!

03.11.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..