Rails - 如何为当前用户设置自定义默认日期格式?

时间:2013-09-18 07:46:42

标签: ruby-on-rails date-format

我的date_format模型中有一个User字段,其中包含%m/%d/%y%d/%m/%y等字符串。

我希望该应用能够以当前用户在date_format字段中设置的任何格式显示日期。

我正在尝试这个,但无济于事:

class ApplicationController < ActionController::Base
  before_filter :user_date_format, if: :current_user

private
  def user_date_format
    Date::DATE_FORMATS[:default]=current_user.date_format
  end
end

但它不起作用,因为它正在改变所有用户的默认格式,而不仅仅是当前用户。

有什么想法吗?

修改 还有哪些其他方法可以更改默认日期格式,仅适用于当前请求 - 即不会干扰可能存在的任何其他请求。

1 个答案:

答案 0 :(得分:2)

Date::DATE_FORMATS[:default]是一个类变量,它被加载到Rails应用程序内存中并保留在那里,除非更改。当您为用户更改它时,即使该用户注销,它也会保持更改状态。它仅在另一个用户登录时才会更改。因此,您可以定义默认格式,如果没有用户登录,则可以使用该格式。像Smting一样

class ApplicationController < ActionController::Base
  before_filter :user_date_format

private
  def user_date_format
    Date::DATE_FORMATS[:default]=  current_user.try(:date_format) || "%d/%m/%y"
  end
end

现在,当用户登录时,格式将设置为其设置。如果此用户退出并且匿名用户(或没有日期格式的用户)访问该应用,则格式默认为%d/%m/%y