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).