Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Rails 3中修改活动记录查询结果属性值_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

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

Ruby on rails 如何在Rails 3中修改活动记录查询结果属性值,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有疑问 @users = User.all @users包含名称、创建地址、电子邮件、手机等属性值 我想将创建的at从mysql datetime格式更新为用户可读的格式,并在controller中进行更新 我已经编写了将日期转换为人类可读格式的代码,但不知道如何在属性进入视图之前设置该属性的值 因此,任何方法都将被推荐直接在视图中的创建属性上使用strftime(): @user.created_at.strftime("%D") 文档:直接在视图中的属性处创建的上使用strftime(

我有疑问

@users = User.all
@users
包含名称、创建地址、电子邮件、手机等属性值

我想将创建的at从mysql datetime格式更新为用户可读的格式,并在controller中进行更新

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

因此,任何方法都将被推荐

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

@user.created_at.strftime("%D")
文档:

直接在视图中的
属性处创建的
上使用
strftime()

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

文档:

仅仅为了表示而弄乱属性值-坏主意,不要这样做

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

#模型
类用户
def human_创建于
创建日期(创建日期)
终止
终止
#看法
或者,您可以创建一个真正的助手方法,因为它只辅助表示,而不是业务逻辑的一部分

# helper
module MyControllerHelper
  def human_created_at user
    make_human_date(user.created_at)
  end
end

# view
<%= human_created_at(@user) %>
#助手
模块MyControllerHelper
在用户处创建的def human__
生成人工日期(用户创建时间)
终止
终止
#看法

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

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

#模型
类用户
def human_创建于
创建日期(创建日期)
终止
终止
#看法
或者,您可以创建一个真正的助手方法,因为它只辅助表示,而不是业务逻辑的一部分

# helper
module MyControllerHelper
  def human_created_at user
    make_human_date(user.created_at)
  end
end

# view
<%= human_created_at(@user) %>
#助手
模块MyControllerHelper
在用户处创建的def human__
生成人工日期(用户创建时间)
终止
终止
#看法

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) 

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) 


我只是想知道,为什么Ruby在DateTime上提供了执行基本相同功能的
strftime()
方法时还要创建所有这些额外的代码呢?它并没有具体说明OP的人性化功能。也许strftime会减少它,也许不会。这是一般情况。很难看出在哪种情况下,
strftime
是不够的,或者rails中已经包含了另一个人性化助手。这绝对不值得作为一个模型方法。不要低估业务需求的流动性。Helper方法对此进行了抽象。它还可以处理本地化等模型方法-这是我的口味选择。Helper方法是它应该属于的地方。如下所述,使用to_替代将语义定义放在一个公共位置,但让每个视图确定自己的风格。。。两全其美!只是想知道,当Ruby在DateTime上提供了
strftime()
方法来执行基本相同的功能时,为什么还要创建所有这些额外的代码呢?它并没有具体说明OP的人性化功能。也许strftime会减少它,也许不会。这是一般情况。很难看出在哪种情况下,
strftime
是不够的,或者rails中已经包含了另一个人性化助手。这绝对不值得作为一个模型方法。不要低估业务需求的流动性。Helper方法对此进行了抽象。它还可以处理本地化等模型方法-这是我的口味选择。Helper方法是它应该属于的地方。如下所述,使用to_替代将语义定义放在一个公共位置,但让每个视图确定自己的风格。。。两全其美!这就是我所说的务实的答案,不需要定义助手,也不需要在模型中定义额外的方法。@rorra:在实际应用中,我仍然主张使用助手方法。请参阅我的答案下面的注释:)在现实世界的应用程序中,我会将您的代码重构为一个简单的strftime调用;)为什么要在rails提供to_s覆盖时使用strftime呢?正如我在下面所说的,也是因为strftime的级别较低。但是,是的,如果在一些地方需要格式化,我同意你的观点。这就是我所说的务实的答案,不需要在模型中定义助手或额外的方法。@rorra:在实际应用中,我仍然主张使用助手方法。请参阅我的答案下面的注释:)在现实世界的应用程序中,我会将您的代码重构为一个简单的strftime调用;)为什么要在rails提供to_s覆盖时使用strftime呢?正如我在下面所说的,也是因为strftime的级别较低。但是我同意你的观点,如果在一些地方需要格式化的话。是的,这很酷。我喜欢使用strftime,如果格式化在应用程序中只需要一次,因为它使事情变得简单,但这对于较大的应用程序来说绝对是方便的。这很酷。如果格式化在应用程序中只需要一次,我倾向于使用strftime,因为它可以让事情变得简单,但对于较大的应用程序来说,这绝对是方便的