validator validations validates_presence_of validates validate rails logical custom ruby-on-rails formatting boolean

ruby on rails - validations - Rieles(o Ruby): Sí/No en lugar de Verdadero/Falso



validates_presence_of (5)

Sé que podría escribir fácilmente una función y ponerla en el controlador de la aplicación, pero preferiría no hacerlo si hay algo más que lo haga ya. Básicamente quiero tener algo como:

>> boolean_variable? => true >> boolean_variable?.yesno => yes >> boolean_variable?.yesno.capitalize => Yes

¿Ya hay algo como esto en el framework de Rails?


Alternativamente, también puede hacer una de sus puntos de vista como:

<%= item.bool_field? ? ''yes'' : ''no'' %>


Hay una joya para eso ahora: humanize_boolean

Entonces lo haces:

true.humanize # => "Yes" false.humanize # => "No"

También admite la internacionalización, por lo que puede cambiar fácilmente la cadena devuelta incluyendo su traducción para en.boolean.yes y en.boolean.no (o cualquier configuración regional que desee)


La gema TrueClass extiende TrueClass , FalseClass y NilClass que es una extensión indirecta que preferiría evitar.

He encontrado que esta ayudante con una traducción de alto nivel está aislada, es amigable de cambiar y puedes darle cualquier cosa veraz o falsa:

# 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 asegura que las variables pasadas al argumento !!(boolean).to_s un valor "true" o "false" al construir la cadena de traducción.

En uso:

# app/views/chalets/show.html.erb <%= humanize_boolean(chalet.rentable?) %>


No existe tal asistente integrado, pero es trivialmente fácil de implementar:

class TrueClass def yesno "Yes" end end class FalseClass def yesno "No" end end


No hay algo en Rails.

Una forma mejor que agregar clases verdaderas / falsas para lograr algo similar sería hacer un método en ApplicationHelper:

def human_boolean(boolean) boolean ? ''Yes'' : ''No'' end

Entonces, en tu vista

<%= human_boolean(boolean_youre_checking) %>

Agregar métodos a las clases integradas generalmente está mal visto. Además, este enfoque se ajusta estrechamente a los ayudantes de Rails como raw() .

Además, uno no es una gran idea, ya que no se puede mantener (o probar) fácilmente.