带空字符串的条件赋值

时间:2017-10-10 09:42:51

标签: ruby-on-rails ruby

我喜欢Ruby中的条件赋值语法并且一直使用它:

x = this_var || that_var

现在我正在处理几个API,它们为不存在的值返回空字符串。由于在Ruby中空字符串的计算结果为true,因此我无法再使用上述语法来设置默认值。当我有几个"级别时,它会变得更糟糕。默认值,例如"如果此var不存在,则将其设置为该var,如果它也不存在,则将其设置为另一个var"。所以我最终这样做了:

x = if this_var.present?
       this_var
    elsif that_var.present?
       that_var
    else
       last_resort
    end

.present?方法有帮助但不多。我怎么能以更简洁的方式写这样的东西?

我正在使用Rails 4,因此欢迎使用Rails方法作为答案:)

由于

2 个答案:

答案 0 :(得分:10)

这是您使用present?兄弟presence的地方(假设您使用rails或至少是有效支持)。

x = this_var.presence || that_var.presence || last_resort

答案 1 :(得分:5)

{mapObject(this.state.guests, (key, value) => {
  return <div key={key}>
    {value.record
    .filter(
      (item,index) => {
        return (
          item.first_name.$t.toLowerCase().includes(this.state.search.toLowerCase())
          //item.last_name.$t.toLowerCase().includes(this.state.search.toLowerCase())
          //item.company.$t.toLowerCase().includes(this.state.search.toLowerCase())
        )
      }
    )
    .map((item,index) => {
      return <div className="columns is-mobile" key={index}>
        <div className="column" key={index}>{item.first_name.$t} {item.last_name.$t} <span class="is-hidden-tablet"><br />{item.company.$t}</span></div> 
        <div className="column is-hidden-mobile" >{item.company.$t}</div>
        <div className="column is-hidden-mobile">
          <EmailFormdisplay guestid={index} />
        </div>
        <div className="column is-hidden-mobile">
          <PhoneFormdisplay guestid={index} />
          </div>
          <div className="column is-hidden-tablet is-one-third-mobile">
          <Dropdown>
            <DropdownTrigger></DropdownTrigger>
              <DropdownContent>
                <div className="columns">
                  <div className="column">
                    <EmailFormdisplay guestid={index} />
                  </div>
                  <div className="column">
                    <PhoneFormdisplay guestid={index} />
                  </div>
                </div>
              </DropdownContent>
          </Dropdown>
          </div>
      </div>;
    })}
    </div>
  })}