Rails前置两次到字符串

时间:2017-03-12 17:21:32

标签: ruby-on-rails ruby

使用Rails 4.2。我有以下内容:

field = ["can't be blank", "is invalid"]

def error_message_for(field)
  if field.present?
    if field.size > 1
      field.last.prepend("and/or ")
    end
    field.join(", ")
  end
end

error_message_for(field)

我希望输出为can't be blank, and/or is invalid,但它是can't be blank, and/or and/or is invalid。您看到and/or出现两次。

有什么问题?

2 个答案:

答案 0 :(得分:3)

对我来说没问题。你确定你没有运行旧的缓存版本(尝试重新启动rails服务器),或者是否有任何奇怪的猴子补丁?

那就是说,我认为你想要实现的目标在Rails中更容易实现:看看to_sentence

这可以简化为:

field.to_sentence(last_word_connector: ' and/or ')

答案 1 :(得分:2)

String#prepend 变异字符串。也就是说,对它的调用并不是幂等的。使用克隆版本的fields数组:

def error_message_for(field)
  field = field.map(&:dup) # HERE
  if field.present?
    if field.size > 1
      field.last.prepend("and/or ")
    end
    field.join(", ")
  end
end