0

我为我的班级创建了这个方法

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

在我不需要时在 IRB 中,然后输入方法并输入

time_stamp(Time.now)

它返回:“07:57PM”这就是我想要的

在 Sinatra 中,虽然我创建了一个新的窥视对象:

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

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

即使我打字

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

它返回:

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

我的整个窥视课看起来像:

  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
4

3 回答 3

0

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

于 2015-01-17T20:55:52.000 回答
0

您没有使用该time_stamp方法,而是直接调用#peep_timestamp.

您可以执行以下操作以根据需要显示它。

<%= time_stamp(peep.peep_timestamp) %>
于 2015-01-17T20:59:56.730 回答
0

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

这样做是更好的做法:

  class Peep

  include DataMapper::Resource
  property :peep_timestamp, Time

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

end

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

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

并在您的视图中调用您的辅助方法,如下所示:

<%= @peep.format_time %>

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

于 2015-01-18T14:36:23.407 回答