使用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
出现两次。
有什么问题?
答案 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