2

「IT プロフェッショナル」や「DB 管理者」などのタイトルを含むフィールドがあります。これを文の途中に表示したいので、小文字にする必要があります。残念ながら、これも頭字語を小文字にすると、「it プロフェッショナルのコミュニティに参加してくれてありがとう」という結果になります。

良いスタートは、Grantovich が以下で言及している解決策です。つまり、私の頭字語を に指定しconfig/initializers/inflections.rbます。

ActiveSupport::Inflector.inflections do |inflect|
  inflect.acronym "IT"
  inflect.acronym "DB"
end

このルートに進む際の問題は、まず、ソリューションの一部として提案されているように、小文字で保存したくないということです。これらはタイトルであり、大文字で保存する必要があるためです。第二に、それらはすでに大文字で定義されており、いきなり小文字にするのは悪い考えです。

見つかった解決策: タイトルを文の途中に表示する必要があるため、小文字を使用する必要があるため、タイトルを小文字にして文を作成し、#humanize を呼び出すことで解決しました。Humanize は、文の最初の文字と定義された頭字語を大文字にします。

4

4 に答える 4

5

可能であれば、文字列を「IT プロフェッショナル」、「DB 管理者」などとして保存し、頭字語以外はすべて小文字にします。次に、頭字語をインフレータに追加し、#titleize必要に応じてタイトル ケースに変換するために使用できます。エッジ ケースとコード メンテナンスの負担という点では、これは独自のコードを記述して「選択的な小文字化」を行うよりも優れたソリューションです。

于 2013-09-24T17:13:23.630 に答える
5

頭字語とは、文字列内の 2 つ以上の大文字が連続する任意の単語を意味すると仮定すると、次のようにすることができます。

def smart_case(field)
  field.to_s.split(' ').map { |word|
    /[A-Z][A-Z]+/.match(word) ? word : word.downcase
  }.join(' ')
end
于 2013-09-24T17:02:52.210 に答える
1

これは醜い方法ですが、次のとおりです。

def format_me(str)
  str.downcase!
  @acronymn_words = ["IT Professional", "DB Administrator"]
  @acronymn_words.each do |a|
    if str.include? a.downcase
      str.gsub!(a.downcase,a)
    end
  end
  capitalize_next = true
  str = str.split.map  do |word|
    if capitalize_next then word.capitalize! end 
    capitalize_next = word.end_with?(".","!","?")
    word
    end.join(" ")
end

探している文字列が正確にわからない限り、これを維持するのは困難ですが、要求した項目を含む正しい形式の文が出力されます。

于 2013-09-24T17:07:09.250 に答える
0

私はこれをそのようにします:

do_not_downcase = ["IT", "DB"] # Complete the list with your favourites words
res = ""
str.split(" ").each do |word|
    if !do_not_downcase.include? word then
        res += word.downcase + " "
    else
        res += word + " "
    end
end

puts res

>welcome IT professionals
于 2013-09-24T16:57:06.417 に答える