使用rubyonrails activeadmin检测用户时区常量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用rubyonrails activeadmin检测用户时区常量相关的知识,希望对你有一定的参考价值。

我在数据库中有记录,其中包含UTC中的created_at字段。需要在active_admin表中将其显示为用户时区中的时间。例如:在DB中创建于2017-12-25 15:52:58页面:2017-12-25 15 17:52:58

我试图在activeadmin中使用此代码

paginated_collection(user_actions.page(params[:page]).per(15), download_links: false) do
            table_for(collection, sortable: false) do |action|
              column ("Timestamp"){|action| action.created_at.in_time_zone('EET').strftime("%Y-%m-%d %H:%M:%S")}
            end
          end

它工作正常。但我需要以编程方式将用户时区常量传递给它

in_time_zone(timezone_variable)

要么

in_time_zone(get_current_timezone_method)

我试着这样做

Time.zone.now.name

但它不起作用我想是因为这段代码试图获得服务器时区而不是客户端。有没有办法在客户端获取客户端时区并在active_admin中显示包含时区更正的created_at?另外(如果前一种方式是不可能的)我想到了另一种方式 - 在用户登录时将用户时区存储在数据库中。并从DB获取它以进入

in_time_zone(action.user.timezone)

。有没有办法让服务器端的控制器操作中的用户时区常量存储在DB中?

答案

这是一个常见的Rails问题,没有好的答案。您可以尝试使用setting a header with JavaScript,但最简单的方法是让用户在其用户配置文件中手动设置其首选时区。

以上是关于使用rubyonrails activeadmin检测用户时区常量的主要内容,如果未能解决你的问题,请参考以下文章

Rails6 禁用所有非 ActiveAdmin 页面的 ActiveAdmin 布局

ActiveAdmin 根据创建需要设置表单输入

使用 activeadmin 管理acts_as_taggable 标签

在activeadmin中排序父菜单项

在 Rails 5 应用程序中使用 ActiveAdmin 创建用户个人资料页面

在 ActiveAdmin 中使用 CarrierWave 多个图像