2016-07-12 1 views
0

投稿コメントという2つのモデルがあります。各モデルのデータフィールドはcreated_atデータタイプですが、jsonレスポンスのレンダリングではcreated_atフィールドをフォーマットする必要がありますが、どちらのモデルでも異なります。レンタルモデル特有の日付

モデルのポストのためのフォーマットは、コメントモデル形式のため2016年5月12日

でなければならないモデルを特定してフォーマットを指定するための任意のオプションは、2016年5月12日

ありさ?

私は別の場所に日付を表​​示していたので、私は追加機能を望んでいないので、私はすべての場所でそれを変更する必要がある関数を書く。

+1

JSONにISO8601の時刻と日付の形式が含まれていて、コンシューマーがそれらを表示する方法を決めることができますか?書式設定の問題を端まで押し込むことは、一般的に最善の方法です。 –

+0

@muistooshort私は消費者がコントロールを保持することを望んでいません。 –

答えて

0

モデルに直接関数を作成して、日時をcreated_atに戻すことができます。

class Post < ActiveRecord::Base 
    def get_date 
    created_at.strftime("%b %-d %y") 
    end 
end 

class Comment < ActiveRecord::Base 
    def get_date 
    created_at.strftime("%m-%d-%Y") 
    end 
end 

その後、ちょうどあなたのビューで次のように置く:strftimeメソッドを使用して日時をフォーマットするより多くの方法については

<%= @comment.get_date %> 

、これをチェックアウト:http://apidock.com/ruby/DateTime/strftime

最新の質問JSONの必要性)

class Post < ActiveRecord::Base 
    def as_json(options) 
    super(options).merge({ 
     :created_at => self.created_at.strftime("%b %-d %y") 
    }) 
    end 
end 

class Comment < ActiveRecord::Base 
    def as_json(options) 
    super(options).merge({ 
     :created_at => self.created_at.strftime("%m-%d-%Y") 
    }) 
    end 
end 
+0

私は別の場所に日付を表​​示するために使用したので、私はすべての場所でそれを変更する必要がある関数を書く場合は、私は追加の機能を持っていません。 –

+0

最後の2つのコードブロック(更新後)は、 'as_json'メソッドを使用する場合にのみJSONオブジェクトに影響します。そのために他のものを使う必要はありません。 – Okomikeruko

+0

これは、as_jsonを使用している場合はうまく動作しますが、as_jsonを使用しない場合はどうなりますか。 –

0

はあなたが自動的にレールが設けられており、I18nを使用する必要がありますflects。

フォーマットを設定するには、config/locales/<current_locale>.yml(current_localeのデフォルトはen)に設定します。

<p><%= I18n.l @post.created_at, format: :default %></p> 
<p><%= I18n.l @comment.created_at, format: :short %></p> 

それとも、汚い、非公式な方法をしたい場合は、あなたがモデルで、あなたのゲッターを上書きすることができます:

class Post < ActiveRecord::Base 
    def created_at 
    I18n.l(super)  
    end 
end 
あなたは、このようにそれを使用することができ、あなたのビューで

en: 
    time: 
    formats: 
     default: "%b %-d %y" 
     short: "%m-%d-%Y" 

created_atのゲッターを上書きするので、これは本当に面倒です。日付なので、実際のDate/Timeオブジェクトはもはや使用できなくなります。代わりに、毎回Stringを取得します。

I18nをご利用ください!これは、日付を書式設定するための良い方法です。

+0

フォーマットの方法の1つですが、モデルの属性のデフォルトフォーマットを設定する任意のオプションがあります –

+0

@BalaKarthik編集を参照してください。 – siegy22

関連する問題