aar*_*ona 37 formatting boolean ruby-on-rails
我知道我可以轻松地编写一个函数并将其放在应用程序控制器中,但是如果还有其他东西可以做到这一点,我宁愿不要.基本上我想要有类似的东西:
>> boolean_variable?
=> true
>> boolean_variable?.yesno
=> yes
>> boolean_variable?.yesno.capitalize
=> Yes
Run Code Online (Sandbox Code Playgroud)
Rails框架中是否有这样的东西?
Nea*_*eal 47
Rails中没有东西.
比添加到true/false类以实现类似的更好的方法是在ApplicationHelper中创建一个方法:
def human_boolean(boolean)
boolean ? 'Yes' : 'No'
end
Run Code Online (Sandbox Code Playgroud)
然后,在你看来
<%= human_boolean(boolean_youre_checking) %>
Run Code Online (Sandbox Code Playgroud)
通常不赞成向内置类添加方法.另外,这种方法非常适合Rails的助手raw().
此外,一次性不是一个好主意,因为它们不易维护(或测试).
Jor*_*ing 36
没有这样的内置帮助程序,但它实现起来非常简单:
class TrueClass
def yesno
"Yes"
end
end
class FalseClass
def yesno
"No"
end
end
Run Code Online (Sandbox Code Playgroud)
小智 23
现在有一个宝石:humanize_boolean
那你就做:
true.humanize # => "Yes"
false.humanize # => "No"
Run Code Online (Sandbox Code Playgroud)
它还支持国际化,因此您可以通过包含en.boolean.yes和en.boolean.no(或您喜欢的任何语言环境)的翻译来轻松更改返回的字符串.
pat*_*ley 15
或者,您也可以在视图中进行一次性操作,例如:
<%= item.bool_field? ? 'yes' : 'no' %>
Run Code Online (Sandbox Code Playgroud)
the*_*ned 15
该humanize_boolean宝石扩展TrueClass,FalseClass并且NilClass这是一个间接的扩展我宁愿避免.
我发现这个顶层翻译的助手是孤立的,友好的改变,你可以给它任何真实或虚假的东西:
# 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'
Run Code Online (Sandbox Code Playgroud)
这样做!!(boolean).to_s可以确保传递给参数变量可以是一个"true"或"false"建立翻译字符串时值.
正在使用:
# app/views/chalets/show.html.erb
<%= humanize_boolean(chalet.rentable?) %>
Run Code Online (Sandbox Code Playgroud)