2016-07-29 12 views
1

私はtime_zone_selectを使用してユーザーのタイムゾーンを保存しています。Ruby on Railsでタイムゾーンオフセットを表示する方法は?

  <div class="row"> 
      <div class="panel panel-primary"> 

       <div class="panel-heading"> 
       <%= f.label :time_zone, "TimeZone*" %> 
       </div> 

       <div class="panel-body"> 
       <%= f.time_zone_select :time_zone, nil, {}, { :class => 'form-control' } %> 
       </div> 
      </div> 
      </div> 

ユーザーのタイムゾーンが文字列で正常に保存されています。私は、ユーザーのタイムゾーンを表示するとき

>> userp.time_zone 
=> "Chennai" 

は今、私はこのビューテンプレートがあるこの

(GMT+05:30) Chennai 

のようなタイムゾーンのオフセットを表示したいが、それは文字列として保存されているので、私はタイムゾーンを操作することはできませんよ。

 <div> 
     <small> 
     <i class="fa fa-clock-o" aria-hidden="true"></i> 
     <span style="padding-left:1px">TimeZone:</span>    
     <%= @user.time_zone %> 
     </small> 
     </div> 

誰かが私をガイドすることができます、どのようにオフセットとタイムゾーンを表示するには?

答えて

2

あなたは例えば、ActiveSupport::TimeZone[named_zone]で配列としてActiveSupport::TimeZoneを扱うことができます。

<div> 
    <small> 
    <i class="fa fa-clock-o" aria-hidden="true"></i> 
    <span style="padding-left:1px">TimeZone:</span>    
    <%= ActiveSupport::TimeZone[@user.time_zone].to_s %> <%= @user.time_zone %> 
    </small> 
    </div> 

あなたはRailsのコンソールでそれをテストすることができます。

[6] pry(main)> ActiveSupport::TimeZone["Chennai"].to_s 
=> "(GMT+05:30) Chennai" 

あなたが#to_sを使用しない場合ということに注意してください。 TimeZoneオブジェクトを取得しますが、これは必要ではありません。 detailed implementation on Githubが表示されます。

やや関連していますが、なぜこのモジュールを配列として扱うことができるのか不思議であれば、それは[]()メソッドを実装しているからです。

+0

ありがとうございます。魅力のように動作します。完璧。私はto_sを取り除き、答えを完全に読んだ後、それを戻しました。完璧な完全な答え。 – LovingRails

関連する問題