У меня есть сценарий, в котором я специально ищу String
со значением "nil"
. Короче говоря, у меня есть условие, в котором я хочу передать nil
, если пользователь выбирает эту опцию в раскрывающемся списке, а не передать "nil"
, что и передается в параметрах:
Мой выбор:
<select name="parent_id">
<option name="All">All</option>
<option name="None" value="nil">None</option>
</select>
Мое состояние:
if params[ :parent_id ].present?
Child.where( parent_id: params[ :parent_id ] ) # I want this to be IS NULL when params[ :parent_id ] == "nil"
end
Как правило, вы должны использовать .nil?
или .blank?
для String
, чтобы проверить значение nil
или пустое String
. Но "nil".nil?
и "nil".blank?
равны false
, как и должно быть.
Поэтому мне любопытно, есть ли хороший способ проверить, является ли String
"nil"
.
В настоящее время я использую myString == "nil"
, но это приводит к таким вещам, как ( myString == "nil" ? nil : myString )
.
if params[ :parent_id ].present?
parent_id = params[ :parent_id ] == "nil" ? nil : params[ :parent_id ]
Child.where( parent_id: parent_id )
end
Это хорошо, когда он используется время от времени, но если это часто используется, это не идеально.
Это довольно редкое явление, я знаю, но это было особенно сложнов Google, поэтому я решил спросить SO.
Мои первоначальные мысли:
- Добавить метод к
String
, чтобы вы могли сделать что-то вроде "nil".nil_literal? #=> true
. - Monkey patch
.presence?
, так что "nil".presence?
возвращает nil
вместо "nil"
.