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.