【问题标题】:Prepend a character if string exists otherwise not如果字符串存在则添加一个字符,否则不存在
【发布时间】:2018-08-11 06:38:36
【问题描述】:

如果后面的变量有值,我想在前面加上一个“/”,否则如果它是 nil,那么保持它为 nil

    l2, follow = params[:all].split('/', 2)
    follow     = follow.nil? ? follow : "/#{follow}"
    redirect_to "#{my_path(locale: locale, l2: l2)}#{rest}"

这里的 params[:all] 可以是一个 url 路径,比如

esp
esp/article/1
esp/article/1/author/1

编辑: 我的方法有效,但想知道是否有更好的方法

【问题讨论】:

  • 但您实际上是在以下行 follow.nil? ? follow : "/#{follow}" 中执行此操作。这种方法行不通?
  • 效果很好,我只是想知道有没有更好的方法

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-5


【解决方案1】:
follow.nil? ? follow : "/#{follow}"

由于RubyString#prepend方法,代码可以重构如下:

follow && follow.prepend("/")

或者由于Ruby 2.3具有安全导航,可以更简洁地表达:

follow&.prepend("/")

【讨论】:

  • 关注 &&= follow.prepend('/')
  • 看起来不错,但prepend实际上改变了变量,所以没有必要分配
  • follow &&= "/#{follow}" 也是一个不错的选择:这里 prepend 是更好的专业选择,但 &&= 可以进行更任意的操作(并避免改变原始字符串,这是一个问题)跨度>
  • 澄清一下,就是follow && follow.prepend('/') 对吧?
猜你喜欢
  • 2015-07-05
  • 1970-01-01
  • 2020-02-04
  • 2022-08-18
  • 1970-01-01
  • 2018-12-19
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多