boolean? Emit "Yes" or "No", not "true" or "false"

Hi,

I have a silly question. I have a form that is filled out that has a number of boolean values in it, represented by checkboxes. After the request is posted, I am generating an e-mail to send to the person handling the request.

In my mailer view (send_request.text.plain.rhtml), I do something like

Important thing one..: <%= @req.important_thing_1 %> Important thing two..: <%= @req.important_thing_2 %> Important thing three: <%= @req.important_thing_3 %>

Which is rendered as

Important thing one..: false Important thing two..: true Important thing three: false

I would like false to display as 'No' and true to display as 'Yes'. Is there a knob or switch somewhere in rails to configure how boolean values are converted into strings?

Thank you.

Regards,

Rich

I have a silly question. I have a form that is filled out that has a number of boolean values in it, represented by checkboxes. After the request is posted, I am generating an e-mail to send to the person handling the request.

In my mailer view (send_request.text.plain.rhtml), I do something like

Important thing one..: <%= @req.important_thing_1 %> Important thing two..: <%= @req.important_thing_2 %> Important thing three: <%= @req.important_thing_3 %>

Which is rendered as

Important thing one..: false Important thing two..: true Important thing three: false

I would like false to display as 'No' and true to display as 'Yes'. Is there a knob or switch somewhere in rails to configure how boolean values are converted into strings?

I don't know if there is, but you could do something like this (and get it loaded via environment.rb):

class TrueClass    def to_yesno      'Yes'     end end

class FalseClass    def to_yesno      'No'     end end

And then in your views do:

Important thing one..: <%= @req.important_thing_1.to_yesno %> Important thing two..: <%= @req.important_thing_2.to_yesno %> Important thing three: <%= @req.important_thing_3.to_yesno %>

try the ternary operator:

bool ? 'Yes' : 'No'

that will produce 'Yes' for true and 'No' for false; if you want an empty string for nil, try:

(bool ? 'Yes' : 'No') unless bool.nil?

that will return nil if bool is nil, which will turn into an empty string in an erb template (since nil.to_s is '').

Of course, you could wrap that in a helper if you really want to, or add custom methods to TrueClass, FalseClass and NilClass... but personally, I find it clean/dry enough just to use the operator.

Cheers, Ken

try the ternary operator:

bool ? 'Yes' : 'No'

that will produce 'Yes' for true and 'No' for false; if you want an empty string for nil, try:

(bool ? 'Yes' : 'No') unless bool.nil?

that will return nil if bool is nil, which will turn into an empty string in an erb template (since nil.to_s is '').

Of course, you could wrap that in a helper if you really want to, or add custom methods to TrueClass, FalseClass and NilClass... but personally, I find it clean/dry enough just to use the operator.

Hello,

Thanks, that works fine. I normally avoid the ternary operator, but in this case, it's a very straight forward replacement so I've chosen this route.

Thanks to everyone who took the time to reply.

Regards, Rich

Just because I was curious:

class TrueClass   def to_s     "Yes"   end end

class FalseClass   def to_s     "No"   end end

true.to_s => "Yes" false.to_s => "No"

But this would mean *anywhere* you print out a boolean value it would render "Yes" or "No".

-Shawn

Woops, didn't realize that someone answered this already!

Ignore me :slight_smile:

-Shawn

Found via google. I made a quick script for this. Sorry for reviving..

class TrueClass   def to_s(style = :boolean)     case style       when :word then 'yes'       when :Word then 'Yes'       when :number then '1'       else 'true'     end   end end

class FalseClass   def to_s(style = :boolean)     case style       when :word then 'no'       when :Word then 'No'       when :number then '0'       else 'false'     end   end end