2017-03-12 1 views
0

Verwenden von Rails 4.2. Ich habe folgendes:Rails wird der Zeichenfolge zweimal vorangestellt

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) 

Ich erwarte, dass der Ausgang can't be blank, and/or is invalid sein, aber es ist can't be blank, and/or and/or is invalid statt. Sie sehen and/or erscheint zweimal.

Was ist los?

+0

Was ist los mit 'field.join (" und/oder ")' ?! – mudasobwa

+2

@mudasobwa: Vermutlich ist es so, dass du einen Satz wie "a, b und/oder c" haben kannst. Siehe meine Antwort auf die Verwendung von "to_sentence" – gwcodes

Antwort

3

Es sieht gut aus für mich. Sind Sie sicher, dass Sie nicht eine alte zwischengespeicherte Version ausführen (versuchen Sie, den rails Server neu zu starten), oder haben Sie irgendwelche seltsamen Affe-Patches?

Das gesagt, ich denke, was Sie erreichen möchten, ist in Rails einfacher machbar: schauen Sie sich to_sentence an.

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

TIL. Das sollte funktionieren, aber ich habe 'kann nicht leer sein und ist ungültig' – Victor

+0

@Victor: du hast Recht. Es sieht so aus, dass 'last_word_connector' für 3+ Element-Arrays verwendet wird und' two_words_connector' für 2-Element-Arrays. Es ist genau dort in der Dokumentation, aber das habe ich noch nie bemerkt! Es sollte möglich sein, beide Argumente gleichzeitig anzugeben. – gwcodes

+0

Das ist gut genug. Ich werde damit leben. Vielen Dank! – Victor

2

String#prependmutiert der Zeichenfolge: zu

Dieses vereinfachen. Das heißt, Anrufe dazu sind nicht idempotent. Verwenden Sie die geklonte Version von fields Array:

Verwandte Themen