2

我的模型中有一个date_format字段User,其中包含一个字符串,例如%m/%d/%yor%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

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

有任何想法吗?

编辑: 我们可以通过哪些其他方式更改默认日期格式,仅适用于当前请求- 即它不会干扰可能存在的任何其他请求。

4

1 回答 1

2

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

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

于 2013-09-18T08:05:57.760 回答