2017-03-12 3 views
0

Rails 4.2を使用します。私は、次のしている:Railsは文字列に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) 

Iが出力さcan't be blank, and/or is invalidことを期待し、それは代わりにcan't be blank, and/or and/or is invalidです。 and/orが2回表示されています。

どうしたのですか?

+0

'field.join(" and/or ")の何が問題なのですか? – mudasobwa

+2

@ mudasobwa: "a、b、c"のような文章があるようです。 'to_sentence'の使用に関する私の答えを参照してください – gwcodes

答えて

3

私は大丈夫です。古いキャッシュバージョンを実行していないか(railsサーバを再起動してみてください)、あるいは奇妙な猿パッチを用意していますか?

つまり、達成しようとしていることは、Railsで簡単に実行できると思います。to_sentenceをご覧ください。

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

TIL。これはうまくいくはずですが、空白にすることはできず無効です。 – Victor

+0

@Victor:あなたは正しいです。 'last_word_connector'は3+要素配列に使われ、' two_words_connector'は2要素配列に使われるようです。それはドキュメントの中にありますが、これまでに気づいたことはありません!両方の引数を同時に指定することは可能でなければなりません。 – gwcodes

+0

これで十分です。私はそれと一緒に暮らすだろう。ありがとう! – Victor

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 
関連する問題