#ruby #activesupport
#рубин #активная поддержка
Вопрос:
Просто понял, что вызов .presence
false
логического значения возвращает nil
вместо false
. Есть ли что-нибудь подобное, что в принципе считается false
присутствующим?
Например:
irb(main):012:0gt; data = true =gt; true irb(main):013:0gt; data.presence =gt; true irb(main):014:0gt; data = false =gt; false irb(main):015:0gt; data.presence =gt; nil
В моем случае у меня есть некоторые атрибуты базы данных, для которых установлено значение false
, но на самом деле они являются допустимыми значениями, поэтому возврат nil
может немного сбить с толку.
Например:
irb(main):016:0gt; fallback = "hello world" =gt; "hello world" irb(main):017:0gt; data.presence || fallback =gt; "hello world"
Просто было бы неплохо, если бы было что-то подобное:
irb(main):014:0gt; data = false =gt; false irb(main):016:0gt; fallback = "hello world" =gt; "hello world" irb(main):017:0gt; data.presence || fallback =gt; false
У меня есть много условий в одной из моих моделей, которая использует метод «резервного копирования», и я понял, что это часто вызывается, потому что пользователь выбрал false
во многих из этих сценариев.
Комментарии:
1. Проверьте на равенство:
data == false
было бы верно.2. Если пользователь действительно выбран
false
, тоdata == false
он вернетсяtrue
вместоfalse
того, чтобы быть выбранным пользователем. Я думаю, что это в основном создало бы обратный эффект, когдаnil
теперь возвращаетсяfalse
иfalse
возвращаетсяtrue
на основе этого условия.3. Просто используйте
.nil?
Ответ №1:
Я бы сделал:
data.nil? ? fallback : data