ruby-on-rails - 使 View 、 Controller 和模型可以访问方法

标签 ruby-on-rails ruby-on-rails-3 json

我正在使用 Rails 3.0。对于模型的 updated_at 列,我需要将其输出为 JSON 中的用户友好格式,而不是将此 2011-09-14T22:01:32Z 视为值,我想为 updated_at 显示不到一分钟前(或我决定的任何用户友好的消息)。我编写了一个以用户友好格式返回输出的方法,现在需要该功能在 View 、 Controller 和模型中可用。执行此操作的最佳方法是什么,这样它就不会令人费解或成为不好的做法。

编辑 根据@klochner 的回答,这是我的date.rb 的样子,但现在它抛出date.rb:21:in格式':参数数量错误(2 代表 0)(ArgumentError)`

include ActionView::Helpers::DateHelper

class ActiveSupport::TimeWithZone
  def friendly
    format
  end
end

class Date
  def friendly
    format
  end
end

class Time
  def friendly
    format
  end
end

def format
  if self.today?
    format_time = ...
  elsif (self < Time.now.beginning_of_day) and (self > Time.now.yesterday.beginning_of_day)
    format_time = ...
  else
    format_time = ...
  end
end

@klochner 建议将 format 更改为 format_helper 效果很好。谢谢!

最佳答案

MonkeyPatch ActiveSupport::TimeWithZone 类,这是我所做的(我把它放在 config/initializers/date.rb 中)

class ActiveSupport::TimeWithZone
  def mdy
    self.strftime("%m/%d/%Y")
  end
end
class Date
  def mdy
    self.strftime("%m/%d/%Y")
  end
end
class Time
  def mdy
    self.strftime("%m/%d/%Y")
  end
end

然后对于任何日期对象(或 AR 模型中的日期字段),您可以调用 mdy():

 > Time.now.mdy
 => "09/14/2011" 
> User.first.created_at.mdy
 => "02/27/2009" 
> Date.today.mdy
 => "09/14/2011" 

对于 json,您可能想为要渲染的模型编写一个 as_json 方法。请参阅此相关答案: render :json does not accept options

关于ruby-on-rails - 使 View 、 Controller 和模型可以访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424675/

相关文章:

ruby-on-rails - 设计,ActionController::UnknownFormat

ruby-on-rails - 在应用程序中混淆数字 ID 的最佳方法是什么

javascript - 使用 jquery 在 JSON 中搜索并显示结果

android - 为什么我不能从 json Retrofit 中获取特殊字段?

ruby-on-rails - 清除 RoR4 中的附加 strong_parameters

ruby-on-rails - 免费城市/州/邮政编码到纬度/经度数据库?

ruby-on-rails - 在 Rails 中使用 unicorn、nginx 和 capistrano 设置虚拟主机

ruby-on-rails - 尝试在 Rails 中保存嵌套属性时 ActiveRecord::AssociationTypeMismatch

ruby-on-rails - 并发 SOAP API 请求总共花费更长的时间

c# - 如何在不在 C# 中定义模型类的情况下向现有 json 添加新属性?