2013-08-25 3 views
1

Я работаю над calorie counter, и я могу создавать новые рецепты, но у меня проблемы с обновлением ингредиента.Как обновить подобъект с помощью mql

я могу создать компонент со следующим MQL:

{ 
    id: recipeId, 
    '/food/recipe/ingredients': { 
    create: 'unless_exists', 
    id: null, 
    quantity: parseFloat(row.$quantity.val()), 
    unit: { 
     id: row.$units.val() 
    }, 
    ingredient: { 
     id: row.ingredientId 
    } 
    } 
} 

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

{ 
    connect: 'update', 
    id: row.rowId, 
    type: '/food/recipe_ingredient', 
    quantity: parseFloat(row.$quantity.val()), 
    unit: { 
    id: row.$units.val() 
    }, 
    ingredient: { 
    id: row.ingredientId 
    } 
} 

Это приводит к ошибке: Can't use [], [{}] or {} in a write.

Результаты с ошибкой: Can't use 'connect' at the root of the query.

{ 
    id: recipeId, 
    '/food/recipe/ingredients': { 
    connect: 'update', 
    id: row.rowId, 
    type: '/food/recipe_ingredient', 
    quantity: parseFloat(row.$quantity.val()) 
    } 
} 

Я получаю сообщение об ошибке: Can't use 'connect': 'update' on a non-unique master property.

{ 
    id: row.rowId, 
    type: '/food/recipe_ingredient', 
    quantity: { 
    connect: 'update', 
    value: parseFloat(row.$quantity.val())                        
    } 
} 

Результаты в ошибке: This value is already in use. Please delete it first. единственный способ удалить старый компонент и добавить новый?

Если единственный способ удалить старые записи и заменить их, есть ли способ, чтобы удалить все компоненты сразу, а не по отдельности с запросами типа:

{ 
    id: recipeId, 
    '/food/recipe/ingredients': { 
    connect: 'delete', 
    id: row.rowId 
    } 
} 
+0

Какой язык вы используете? parseFloat() и $ quantity не являются выражениями MQL. Я предполагаю, что вы пытаетесь манипулировать CVT, не понимая, как они соединяются. –

+0

Я строю запросы в javascript и эти записи разыгрывают значения. Они не передаются в конечную точку записи. – Will

ответ

1

Это не «субобъект», но отдельный узел в своем собственном праве. Я бы предложил прочитать о CVTs или типах медиаторов. Чтобы изменить его свойства, вам нужно переместить соединение во внутренний запрос.

Вот дрожжи ингредиент node из моего теста пиццы recipe

Этот запрос будет обновлять количество для дрожжей (при условии, что есть только один компонент узел определения дрожжей):

[{ 
    "id": "/m/0wh8nkh", 
    "/food/recipe/ingredients": [{ 
    "ingredient": { 
     "id": "/en/yeast" 
    }, 
    "quantity": { 
     "connect": "update", 
     "value": 2 
    }, 
    "unit": { 
     "id": "/en/teaspoon", 
     "connect": "update" 
    } 
    }] 
}] 

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

Другие примечания: - вы не должны создавать новые блюда для каждого Рецепта. Многие блюда должны уже существовать в Freebase, и вы должны позволить пользователю выбирать их отдельно от рецепта. - Вам нужно добавить/общую/тему для блюд & Рецептов, которые вы создаете (но не к вариаторам для ингредиентов)

Это здорово, что вы используете песочницу, так что вы не портя производство при отладке.

+0

Это работает для обновления количества, но эта же форма не работает для обновления единиц. Не могли бы вы показать мне, как обновлять единицы? – Will

+0

Единицы - это сущность, а не значение, поэтому вы ссылаетесь на нее, используя свой идентификатор или MID. Я обновил запрос. –

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

  • Нет связанных вопросов^_^