-1
=> [#<WelcomeCall id: 16, call_at: "2013-11-06 12:00:00">,
    #<WelcomeCall id: 17, call_at: "2013-11-06 13:00:00">,
    #<WelcomeCall id: 18, call_at: "2013-11-06 17:00:00">,
    #<WelcomeCall id: 19, call_at: "2013-11-06 14:00:00">]

我想从所有这些WelcomeCall对象中获取一系列小时数。

=> [12, 13, 17, 14]

WelcomeCall 是 Rails 模型。

我为此使用过:

  def self.scheduled_hours date
    by_date(date).map do |wc|
      wc.call_at.hour
    end
  end

但也许有更好的方法?

4

4 回答 4

3

你想用map.

尝试这样的事情:

new_array = old_array.map{ |welcome_call| welcome_call.call_at.strftime('%H').to_i }

假设您的welcome_call.call_at 是一个日期。如果它不是 Date 对象,请尝试:

new_array = old_array.map do |welcome_call|
    date = Date.parse(welcome_call.call_at)
    date.strftime('%H').to_i
end
于 2013-11-07T10:11:48.127 回答
0

您可以遍历数组并使用解析 call_at 日期时间对象strftime('%H').to_i

于 2013-11-07T09:59:15.910 回答
0
welcome_calls.map {|w| w.hour}

将日期解析为字符串,然后将字符串解析为 Fixnum 并没有我想的那么快。

于 2013-11-07T10:13:46.203 回答
0

我只是尝试了一些东西并且它有效,我不确定它是否是正确的方法。

var = Model.all
t = var.collect(&:call_at)
hours_arr = []
t.each do |value|
hours_arr << value.time.hour
end
于 2013-11-07T10:15:02.717 回答