我有一个从模型
访问属性的视图。<%= @ checklist.alt_escape_indicated%>
。<%= @ checklist.sign_condition%>
其中一些将是我想要显示为“是”或“否”的布尔值。我在我的模型类中编写了一些代码来执行此操作:
def getter_decorator(attr)
var = read_attribute(attr)
if !!var == var
boolean_as_string(var)
else
var
end
end
def boolean_as_string(bool_type)
if bool_type
"Yes"
else
"No"
end
end
所以我可以这样做: 。<%= @ checklist.boolean_as_string(@ checklist.sign_condition)%>
我所知道的属性是boolean或getter_decorator。我的问题是。有没有办法可以装饰我的所有getter,所以当我这样做时会调用这个函数 @ checklist.sign_condition
答案 0 :(得分:1)
为什么不覆盖getter或创建一个新的?
def sign_condition
self.sign_condition == true ? "Yes" : "No"
end
如果这导致冲突(你必须测试并看到),只需用略有不同的名字做同样的事情......
def sign_state
self.sign_condition == true ? "Yes" : "No"
end
答案 1 :(得分:1)
def getter_decorator(attr)
var = read_attribute(attr)
var == true ? "Yes" : var == false ? "No" : var
end
答案 2 :(得分:1)
我建议将它作为辅助方法,因为它仅用于演示。当您的网站在国际上起飞时,这也将使其更容易本地化...
def yn(val)
val ? "Yes" : "No"
# localized: I18n.t (val ? "Yes" : "No")
end
然后在您的视图中使用它:
<%= yn @checklist.sign_condition %>
但是,如果您真的希望bool自动显示为是/否,您可以执行以下操作:
class TrueClass
def to_s
self ? "Yes" : "No"
end
end
puts true #-> Yes
但我不建议这样做;)
答案 3 :(得分:0)
class Checklist
%w(alt_escape_indicated sign_condition other_getters).each do |method|
eval "def #{method}; super ? 'Yes' : 'No'; end"
end
end