2016-07-29 77 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 

offset這是視圖模板,但我不能夠操縱時區,因爲它存儲爲一個字符串。

 <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::TimeZoneActiveSupport::TimeZone[named_zone]數組,如:

<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