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


#1

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


#2

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 %>


#3

Duzenbury, Rich wrote:

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 understand you want to change boolean to yes or no depend on true or
false :slight_smile:

If you want to use it in the view, you can put the code in the helper so
you can access to it across all your template files :slight_smile:

def to_yesorno(boolean)
if boolean == ‘yes’
return ‘yes’
else
return ‘no’
end
end

then you call on it

puts to_yesorno(‘true’) #should return yes :smiley:


#4

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


#5

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


#6

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

Ignore me :slight_smile:

-Shawn


#7

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

https://gist.github.com/pehrlich/4963672


#8

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