2016-04-03 16 views
-1

Thu, 10th Jan 2016のような日付をフォーマットしようとしています。私は現在の時間を取る方法を書いて、それを上記の形式で表示させる。未定義のメソッド 'ordinalize' for 3:Fixnum(NoMethodError)

def time_format(ob_created_at) 
    ob_duplicate = ob_created_at 
    ob_duplicate = ob_created_at.strftime("%a") 
    day = ob_created_at.strftime("%d") 
    day = day.to_i.ordinalize 
    ob_duplicate = ob_duplicate + day + ob_created_at.strftime("%b %Y") 
end 

t = Time.now 
time_format(t) 

dayは文字列です。 intに変換しようとしましたが、ordinalizeを適用しました。定義されていないメソッドエラーが発生します。

+0

必要なのは、この2つの方法です。 – Aetherus

+0

time_formatメソッドの最後の1行を確認できます – gates

+0

'day = day.to_i.ordinalize'の行で、' ordinalize'メソッドはどこから来たのですか? – Aetherus

答えて

1

Fixnum#ordinalizeは、ルビーコアライブラリにはありません。 Ruby Docを参照してください。

Fixnum#ordinalizeはRailsのの依存関係ですアクティブサポートの一部であるので、あなたは自由のためのRailsアプリケーションでこの方法を使用することができますが、非レールのプロジェクトでは、Activeサポートをインストールする必要がありますと、少なくともactive_support/core_ext/integer/inflectionsが必要ですそれにアクセスする。

3

ordinalizeはRubyメソッドではありませんが、Rails 'ActiveSupport gemで追加されています。

私は、あなたが必要とするすべてが単純な方法にすぎない場合、ActiveSupportの宝石依存性をプロジェクトに追加する価値はないと主張します。実装hereを探してください。上記のordinalもご覧ください。私は `Fixnum`ため` ordinalize`という名前のメソッドが表示されない

def ordinal(number) 
    abs_number = number.to_i.abs 

    if (11..13).include?(abs_number % 100) 
    "th" 
    else 
    case abs_number % 10 
     when 1; "st" 
     when 2; "nd" 
     when 3; "rd" 
     else "th" 
    end 
    end 
end 

def ordinalize(number) 
    "#{number}#{ordinal(number)}" 
end 
+0

ありがとう。私はなぜ他の人がそんなに思いやりがないのかわからない。 – gates

+0

私はこれを複数回アップヴォートすることができたらいいと思う。私はこの1つの方法のためだけにActiveSupportと文字通り数日間戦ってきました。 – Liz

関連する問題