首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails/Ruby除非零/零?

Rails/Ruby除非零/零?
EN

Stack Overflow用户
提问于 2012-08-02 08:01:35
回答 4查看 7.2K关注 0票数 1

有没有办法使这种情况在rails视图中更加紧凑?

我有哈梅尔

代码语言:javascript
复制
= object.count unless object.count ==0

我有点不喜欢这样,我在那里重复这个函数,我更想要一些类似的东西

代码语言:javascript
复制
= object.count unless ==0

如果我有更复杂的陈述

代码语言:javascript
复制
= object.relations.where(attribute: "something").count unless zero?

我可以把它分成两行

代码语言:javascript
复制
- cnt = object.relations.where(attribute: "something").count
= cnt unless cnt==0

但是对于每一种情况,我都会有多行,并且存储一个变量来使用一次糟透了。

编辑:为了详细说明,我想检查数字是否为0,如果是,如果没有显示任何内容。从那个角度看它更好看。

更新:

其中一个答案是按照以下思路提出的解决方案:

代码语言:javascript
复制
class Object
  def unless
    self unless yield(self)
  end
end

这样,我就可以用块来调用我拥有的任何对象。.unless{|c| c<1}

这让我可以调整条件,并保持非常清楚发生了什么:),奖金是因为它是块驱动的,我可以在任何对象使用这个:P。

谢谢大家:)

更新更多的

|c|吸进块里。因此,我查找了api并对其进行了更改。

代码语言:javascript
复制
class Object
  def unless(&block)
    self unless instance_eval(&block)
  end
end

所以现在我可以使用.count.unless{0?}来完成这个任务:P。或者如果我有一个复杂的条件,我可以在|c|中加上它等等。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-02 08:31:31

如果这仅仅是关于count的,您可以对Enumerable进行猴子补丁。

代码语言:javascript
复制
module Enumerable
  def count_or_empty_string
    self.any? ? self.count : ''
  end
end

如果object是可枚举的,则可以这样做:

代码语言:javascript
复制
= object.count_or_empty_string

这将返回一个"",如果是object.count == 0,它将返回一个整数。因此,在您的HAML中不再需要unlessif

票数 1
EN

Stack Overflow用户

发布于 2012-08-02 08:06:09

如果对象是数组,则可以使用object.empty? (或相反情况下的object.any? )。

票数 3
EN

Stack Overflow用户

发布于 2012-08-02 09:10:41

只需创建一个视图助手:

代码语言:javascript
复制
def display_count_or_nothing(array)
  array.count unless array.count == 0
end

在视图中,您可以这样使用它:

代码语言:javascript
复制
<%= display_count_or_nothing(array) %>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11773319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档