2016-02-29 5 views
5

RubyまたはRails DSLが文字列をフォーマットする文字列"mccdougal""McDougal"と同時に、文字列をそのまま"McDougal"のままにしますか?'mccdougal'のような文字列を 'McDougal'に正しくフォーマットする方法

以下にtitleize"McDougal"に結果を渡す:あなたは正しくそのように名前をフォーマット何かを見つけるつもりはありません

"McDougal".titleize # => "Mc Dougal" 
+2

を得ることができます行うには正しい事は彼または彼女の名前をフォーマットするユーザーが責任を負うようにすることです:あなたは、初期化子のコードのこのビットをドロップすることができ、そしてそれをマングリングしないでください。 –

答えて

4

。 McDougalのMとDが資本化される理由は、任意の地域的なものであるからです。そのようなことをするために私が考えることができる唯一の方法はルックアップテーブルです。あなたがプログラム的に得られる最高のものは"mcdougal".capitalize => "Mcdougal"と言います。私はあなたが地域の資本金を推測することはできないと推測すべきではないと主張します。

しかし、あなたはアイルランドのためにアプリを作っているので、絶対に行う必要があります。問題を解決するためにルックアップテーブルを作成します。面倒ですが、有限のケースがあります。

+0

私はほぼ同じ答えを途中で入力していました。 – sameera207

5

私の知る限り、このケースを処理できるRailsヘルパーはありません。それは特別な処理が必要な非標準的なエッジケースです。しかし、カスタム文字列の変曲点を作成することができます。

ActiveSupport::Inflector.inflections(:en) do |inflect| 
    inflect.human /mcdougal/, 'McDougal' 
end 

そしてあなたが "mcdougal".humanizeを呼び出すとき、あなたは "McDougal"

+0

この動作の詳細についてはhttp://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.htmlを参照してください。 –

+1

唯一の問題は、宇宙のすべての単一の「Mc」という名前を追加することですが、この特定のケースでは機能します。 – tadman

+0

真。 'inflect.human /mc(.*)/、" Mc#{$ 1} .titleize "のようなものが奇跡的に動作するかどうかは疑問です。 –

関連する問題