【问题标题】:Formatting a Field Whenever it's Queried每当查询时格式化字段
【发布时间】:2013-04-19 20:51:58
【问题描述】:

我有一个 Rails 应用程序作为 iPhone 应用程序的后端。每当创建一条记录(我们称之为message)时,我都会将来自 iPhone 应用程序的字符串格式化为 Ruby DateTime,该字符串将作为字段保存在数据库中。字符串本身是从 iPhone 端的 NSDate 转换而来的。我的问题是我想将 DateTime 转换回一个字符串,该字符串可以在发送消息查询时轻松格式化回 NSDate。有没有简单的解决方案?

【问题讨论】:

  • 只使用字符串有什么问题,比如2013-04-19 08:00:00
  • 我最终将编写一些查询,要求该字段为 DateTime 以对消息进行排序。除非 Rails 为我这样做,即使该字段是字符串。还没试过。

标签: sql ruby-on-rails ruby-on-rails-3 time


【解决方案1】:

视图想法不一定是坏的,但我可能会建议将date_string 属性放在您的Message 模型上,如下所示:

class Message
  def date_string
    date.to_s # or however you want to format it
  end
end

然后,当您渲染 JSON 时,包括 date_string。我不知道你用什么来渲染你的 JSON,但我对RABL 有过非常棒的体验。

【讨论】:

  • 旁注:我建议转换为字符串而不是 NSDate,因为我不认为 Rails 应用程序有责任了解哪种应用程序将使用其数据。让 Rails 应用程序不可知,让 iOS 应用程序将通用字符串转换为 NSDate。
  • 最大的问题是,当我想使用该字段过滤查询时,是否会将一个字符串作为 NSDate 注册到我的 Rails 应用程序中?
【解决方案2】:

解决方案是视图。在数据库中创建一个视图来访问表:

create view vw_table as
    select <columns that you want>
           <code to convert datetime here> as NSDate
    from t;

然后您可以在应用程序中使用视图而不是表格。

【讨论】:

  • 现在我需要弄清楚如何通过 Rails 做到这一点。
  • 我相信这就像使用普通桌子一样简单。只需像创建表格一样在视图顶部创建模型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
相关资源
最近更新 更多