有没有办法使这种情况在rails视图中更加紧凑?
我有哈梅尔
= 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{0?}来完成这个任务:P。或者如果我有一个复杂的条件,我可以在|c|中加上它等等。
发布于 2012-08-02 08:31:31
如果这仅仅是关于count的,您可以对Enumerable进行猴子补丁。
module Enumerable
def count_or_empty_string
self.any? ? self.count : ''
end
end如果object是可枚举的,则可以这样做:
= object.count_or_empty_string这将返回一个"",如果是object.count == 0,它将返回一个整数。因此,在您的HAML中不再需要unless或if。
发布于 2012-08-02 08:06:09
如果对象是数组,则可以使用object.empty? (或相反情况下的object.any? )。
发布于 2012-08-02 09:10:41
只需创建一个视图助手:
def display_count_or_nothing(array)
array.count unless array.count == 0
end在视图中,您可以这样使用它:
<%= display_count_or_nothing(array) %>https://stackoverflow.com/questions/11773319
复制相似问题