Search code examples
ruby-on-railsdatetimeactiveadmin

How to change how ActiveAdmin displays time (every time)


Since the default time in the database is in utc, I wanted to be able to still display it in the users correct time. To do this I had to take column :created_at and change it into this:

index do
...
  column :created_at, :sortable => :created_at do |obj|
    obj.created_at.localtime.strftime("%B %d, %Y %H:%M)
  end
...
end

Seems pretty easy to do once or twice, but when you need to override every index and show method, the process get's a little taxing.

Is there a way to override how ActiveAdmin displays time without having to override each occurrence?

I know I could create a function or probably use the functions provided for time better, but I'd still have to use it each time I want to display time. I want to override it without worrying I missed one.


Solution

  • I've found there are two ways to do this:

    1. Javascript

    This is the easier method because it is very short and doesn't involve adding a db field. It works because it uses the users timezone from their browser. This answer gives insight on how to do this.

    2. From the Database

    This process can be found in this railscast.

    Essentially store a time_zone field in the users table. Then use an before_filter (although an around_filter might be a better idea) to set the timezone in the controller.

    before_filter :set_time_zone
    
    private
    def set_time_zone
      Time.zone = current_user.time_zone if current_user
    end