【发布时间】:2012-07-31 04:18:55
【问题描述】:
有没有办法让这种情况在 Rails 视图中更加紧凑?
例如我有haml
= object.count unless object.count ==0
我有点不喜欢我在那里重复这个功能,我宁愿有类似的东西
= object.count unless ==0
例如,如果我有更复杂的陈述
= object.relations.where(attribute: "something").count unless zero?
我可以把它分成两行说
- cnt = object.relations.where(attribute: "something").count
= cnt unless cnt==0
但是对于每种情况,我都会有多行,并且存储一个要使用一次的变量很糟糕。
编辑:只是为了详细说明我想检查数字是否为 0,如果是,则不显示任何内容。这样看起来更好看。
更新:
其中一个答案提出了沿着这些思路的解决方案
class Object
def unless
self unless yield(self)
end
end
所以我可以用块来调用我拥有的任何对象,例如。 .unless{|c| c<1}
这让我可以添加条件,并且很清楚发生了什么:),奖励是因为它是块驱动的,我可以在任何对象上使用它:P。
谢谢大家:)
更新更多
在区块中有|c| 糟透了。所以我查了api也改了
class Object
def unless(&block)
self unless instance_eval(&block)
end
end
所以现在我可以使用 .count.unless{zero?} 来完成此操作:P。或者,如果我有一个复杂的情况,我可以将其添加到 |c| 等中。
【问题讨论】:
-
无论如何都不应该在视图中做这种事情:
object.relations.where(attribute: "something").count。对于简单的东西,我认为重复object.count没有问题。unless == 0或unless zero?是不可能的。你总是需要对object做点什么。
标签: ruby-on-rails ruby conditional