Spec-Zone.ru › RethinkDB ruby

Команда ReQL: default

Синтаксис команды

value.default(default_value | function) → any
sequence.default(default_value | function) → any

Описание

Предоставляет значение по умолчанию в случае ошибок отсутствия данных. Команда default вычисляет свой первый аргумент (значение, к которому она прицеплена). Если этот аргумент возвращает nil или при вычислении возникает ошибка отсутствия данных, тогда default возвращает свой второй аргумент. Второй аргумент обычно является значением по умолчанию, но это может быть и функция, возвращающая значение.

Пример: Получить заголовки и авторов таблицы posts. В случае, если поле author отсутствует или nil, мы хотим получить строку Anonymous.

r.table("posts").map{ |post|
    {
        :title => post[:title],
        :author => post[:author].default("Anonymous")
    }
}.run(conn)

Мы можем переписать предыдущий запрос, используя также r.branch.

r.table("posts").map{ |post|
    r.branch(
        post.has_fields("author"),
        {
            :title => post[:title],
            :author => post[:author]
        },
        {
            :title => post[:title],
            :author => "Anonymous" 
        }
    )
}.run(conn)

Пример: Команда default также может использоваться для фильтрации документов. Получить всех наших пользователей, которые не являются взрослыми или чей возраст неизвестен (т.е., поле age отсутствует или равно nil).

r.table("users").filter{ |user|
    (user[:age] < 18).default(true)
}.run(conn)

Еще один способ записи предыдущего запроса — установить возраст в -1 в случае отсутствия поля.

r.table("users").filter{ |user|
    user[:age].default(-1) < 18
}.run(conn)

Это можно сделать с помощью has_fields вместо default.

r.table("users").filter{ |user|
    user.has_fields("age").not() | (user[:age] < 18)
}.run(conn)

Тело каждого фильтра заключено в неявный .default(false). Вы можете перезаписать значение false с помощью параметра default.

r.table('users').filter(:default => true) {|user|
    (user[:age] < 18)
}.run(conn)

Пример: Функциональная форма default получает сообщение об ошибке в качестве аргумента.

r.table("posts").map{ |post|
    {
        :title => post["title"],
        :author => post["author"].default{ |err| err }
    }
}.run(conn)

Этот конкретный пример просто возвращает сообщение об ошибке, поэтому он не очень полезен. Но было бы возможно изменить значение по умолчанию, основываясь на конкретном сообщении об ошибке.

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/ruby/default/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API