Forum: Ruby on Rails boolean? Emit "Yes" or "No", not "true" or "false"

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Duzenbury, Rich (Guest)
on 2007-04-02 23:04
(Received via mailing list)
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
Philip H. (Guest)
on 2007-04-02 23:30
(Received via mailing list)
>
> 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 %>
Jamal S. (Guest)
on 2007-04-02 23:33
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 :)

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

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 :D
unknown (Guest)
on 2007-04-03 06:17
(Received via mailing list)
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
Duzenbury, Rich (Guest)
on 2007-04-03 17:54
(Received via mailing list)
> 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
Shawn Roske (Guest)
on 2007-04-03 21:01
(Received via mailing list)
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
Shawn Roske (Guest)
on 2007-04-03 21:02
(Received via mailing list)
Woops, didn't realize that someone answered this already!

Ignore me :)

-Shawn
Peter E. (Guest)
on 2013-02-15 23:29
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
This topic is locked and can not be replied to.