Аналогичный метод, такой как присутствие, но считает ложным присутствие

#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