在 Ruby/Sinatra Time.now 格式在 IRB 中有效,但在 rackup/local 中无效

In Ruby/Sinatra Time.now formatting is working in IRB but not in rackup/local

我为 class

创建了这个方法
def time_stamp(time)
  time.strftime("%I:%M%p") 
end

当我不需要时在IRB中,进入方法并放入

time_stamp(Time.now)

它 returns: "07:57PM" 这就是我想要的

在 Sinatra 中,尽管我创建了一个新的 peep 对象:

@peep = Peep.new(:peep_timestamp => time_stamp(Time.now))

但是当我去 rackup 查看我的本地时,它仍然有未格式化的时间: 2015-01-17 19:15:23 +0000(例如)。我希望它在创建 Peep 对象时显示“07:57PM”或任何当前时间。

即使我输入

@peep6 = Peep.new(:peep_timestamp => "8:34PM")

它returns:

<Peep @id=nil @message=nil @peep_timestamp=2015-01-17 20:34:00 +0000>

我的整个 Peep class 看起来像:

  class Peep

  include DataMapper::Resource

  property :id,     Serial 
  property :message, Text
  property :peep_timestamp, Time
  property :username, String

  def time_stamp(time)
    time.strftime("%I:%M%p") 
  end

end

我觉得是跟属性:peep_timestamp,时间有关。因为(相当不直观)时间包括日期。我认为您需要在 Peep 中创建一个方法来更改为此 属性 保存的内容,这样它就不会引用日期。

您没有使用 time_stamp 方法,您直接调用 #peep_timestamp

你可以像下面这样来显示你想要的。

<%= time_stamp(peep.peep_timestamp) %>

感谢您分享您的 class,问题是 Peep 需要一个 Time 对象,但您向它发送了一个格式化的字符串。

最好这样做:

  class Peep

  include DataMapper::Resource
  property :peep_timestamp, Time

  def format_time
    self.peep_timestamp.strftime("%I:%M%p") 
  end

end

现在您仍然可以使用以下方法实例化 class:

@peep = Peep.new(peep_timestamp: Time.now)

并且在您看来,像这样调用您的辅助方法:

<%= @peep.format_time %>

您希望您的对象有一个 Time 对象,但为了查看目的,您可以将其强制转换为您想要的任何格式,但如果您需要更改视图中的某些内容,您将始终可以访问完整的 Time 对象.