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

时间:2012-12-05 13:18:08

标签: ruby-on-rails ruby activerecord

我有查询

@users = User.all

@users包含name,created_at,email,mobile等属性值

我想从mysql datetime格式更新创建的用户可读格式,并在控制器

中更新它

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

所以任何方法都将适用

3 个答案:

答案 0 :(得分:3)

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) 

documentation

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:2)

仅为了呈现而弄乱属性值 - 不好的主意,不要这样做。

这看起来像一个辅助方法。我可能会把它放入用户模型本身(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) %>