如何在 Rails 3 中修改活动记录查询结果属性值



我有查询

@users = User.all

@users包含姓名,created_at,电子邮件,手机等作为属性值

我想将创建的 at 更新为 mysql 日期时间格式的用户可读格式并在控制器中更新它

我已经编写了将日期转换为人类可读格式的代码,但不知道如何在查看之前为属性设置值

所以任何方法都会被适用

Rails 可以添加其他日期/时间格式...在初始值设定项文件中放置类似以下内容:

Date::DATE_FORMATS[:short_date] = "%b %d, %Y"
Date::DATE_FORMATS[:short_slashed] = "%m/%d/%Y" #careful when giving this to mysql adapter
Date::DATE_FORMATS[:date_dashed] = "%m-%d-%Y"
Date::DATE_FORMATS[:mysql_date] = "%Y-%m-%d"
Date::DATE_FORMATS[:full_date] = "%A, %B %d, %Y"
Time::DATE_FORMATS[:short_slashed] = "%m/%d/%Y %I:%M %p"
Time::DATE_FORMATS[:mytime] = "%a %b %d at %I:%M %p"
Time::DATE_FORMATS[:short_date] = "%b %d, %Y"
Time::DATE_FORMATS[:date_dashed] = "%m-%d-%Y"
Time::DATE_FORMATS[:mysql_date] = "%Y-%m-%d"

然后在您的视图中,您可以选择其中任何一个:

 @user.created_at.to_s(:mytime) 
 @user.created_at.to_s(:short_date) 

文档

直接在视图中的 created_at 属性上使用strftime()

@user.created_at.strftime("%D")

文档:http://www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime

只是为了演示而弄乱属性值 - 坏主意,不要那样做。

这看起来像一个帮助程序方法。我可能会把它放在用户模型本身中(make_human_date包含你"人性化"日期的逻辑,你没有指定)

# model
class User
  def human_created_at
    make_human_date(created_at)
  end
end
# view
<%= @user.human_created_at %>

或者,您可以创建一个真正的帮助程序方法,因为它只有助于呈现,而不是业务逻辑的一部分。

# helper
module MyControllerHelper
  def human_created_at user
    make_human_date(user.created_at)
  end
end
# view
<%= human_created_at(@user) %>

最新更新