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.
Da8f30efea70c7c865790820df7679b6?d=identicon&s=25 Duzenbury, Rich (Guest)
on 2007-04-02 21: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
2f9a03aa0fcfe945229cb6126eda2cb2?d=identicon&s=25 Philip Hallstrom (Guest)
on 2007-04-02 21: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 %>
E3513c4edd6810bb4b9914b58da2a2c3?d=identicon&s=25 Jamal Soueidan (jamal)
on 2007-04-02 21: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
Dbbfa6d791e84b064c1ac1c04f49d9d0?d=identicon&s=25 unknown (Guest)
on 2007-04-03 04: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
Da8f30efea70c7c865790820df7679b6?d=identicon&s=25 Duzenbury, Rich (Guest)
on 2007-04-03 15: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
7db798c17fea871c27402138b4497912?d=identicon&s=25 Shawn Roske (Guest)
on 2007-04-03 19: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
7db798c17fea871c27402138b4497912?d=identicon&s=25 Shawn Roske (Guest)
on 2007-04-03 19:02
(Received via mailing list)
Woops, didn't realize that someone answered this already!

Ignore me :)

-Shawn
6401139bc99de224a54a0883d52f7378?d=identicon&s=25 Peter Ehrlich (pehrlich)
on 2013-02-15 22: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.