【问题标题】:How to join two array attributes if the second is != "" in Ruby如果第二个是 != "" 在 Ruby 中,如何连接两个数组属性
【发布时间】:2015-12-02 18:55:51
【问题描述】:

我有一个包含以下两个元素的数组:

if params["location"]
      params["location"]["street"] =[
          params["location"].delete("address1"),
          params["location"].delete("address2")
      ].compact.join(", ")
      l = ::Location.create!(street: params["location"]["street"],
            city: params["location"]["city"], 
            state: params["location"]["state"],
            zip: params["location"]["postal"], 
            country: params["location"]["country"])

我要做的是将两者连接在一起,由“,”分隔,仅当 address2 为空字符串/nil 时。

示例 1:

address1 = "56 West Gay Street"

address2 = "Apt. 211"

实际:“56 West Gay Street, Apt.211”
预期:“56 West Gay Street, Apt.211”


示例 2:

address1 = "56 West Gay Street"

地址2 = ""

实际:“西同志街 56 号”
预期:“56 West Gay Street”

【问题讨论】:

    标签: arrays ruby string


    【解决方案1】:

    问题是params['location']['address2']不是空的,而是一个空字符串。您可以使用present? 仅选择非空白字符串。

    if params['location']
      street = [
        params['location'].delete('address1'),
        params['location'].delete('address2')
      ].select(&:present?).join(', ')
    
      l = ::Location.create!(params['location'].merge('street' => street))
    end
    

    【讨论】:

    • 这适用于 Rails,但如果问题是关于 ruby​​,我们将不得不定义 present? 方法或将其与 ""nil 进行比较
    【解决方案2】:

    假设ab 是你的两个字符串:

    [a,b].select(&:present?).join(", ")
    

    【讨论】:

    • 这给了我真假,我想我需要&:presence,就像下面的答案一样。不过感谢您的帮助
    • 重要的部分完全一样?取决于你如何设置a和b。 select 将从给定条件为真的可枚举中选择所有值。所以一个空字符串或 nil 将被删除。
    猜你喜欢
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 2018-05-05
    • 2019-10-28
    相关资源
    最近更新 更多