Rails (or Ruby): Yes/No instead of True/False
The humanize_boolean
gem extends the TrueClass
, FalseClass
and NilClass
which is an indirect extension I would prefer to avoid.
I've found this helper with a top level translation is isolated, friendly to change and you can give it anything truthy or falsey:
# app/helpers/application_helper.rb
class ApplicationHelper
def humanize_boolean(boolean)
I18n.t((!!boolean).to_s)
end
end
# config/locales/en.yml
en:
:true: 'Yes'
:false: 'No'
Doing !!(boolean).to_s
ensures the variables passed to the argument is either a "true"
or "false"
value when building the translation string.
In use:
# app/views/chalets/show.html.erb
<%= humanize_boolean(chalet.rentable?) %>
There is a gem for that now: humanize_boolean
Then you just do:
true.humanize # => "Yes"
false.humanize # => "No"
It also supports internationalization so you can easily change the returned string by including your translation for en.boolean.yes and en.boolean.no (or any locale you like)
No such built-in helper exists, but it's trivially easy to implement:
class TrueClass
def yesno
"Yes"
end
end
class FalseClass
def yesno
"No"
end
end
There isn't something in Rails.
A better way than adding to the true/false classes to achieve something similar would be to make a method in ApplicationHelper:
def human_boolean(boolean)
boolean ? 'Yes' : 'No'
end
Then, in your view
<%= human_boolean(boolean_youre_checking) %>
Adding methods to built-in classes is generally frowned upon. Plus, this approach fits in closely to Rails' helpers like raw()
.
Also, one offs aren't a great idea as they aren't easily maintained (or tested).