无法在Ruby / Rails中映射一系列日期

时间:2015-06-23 09:19:51

标签: ruby-on-rails ruby

我正在尝试映射一系列日期,并将它们作为数组传递给我的视图,如下所示:

from, to = Date.parse("2014-01-01"), Date.yesterday
date_range = (from..to)

@mapped_dates = date_range.map {|date| date.strftime("%b %e")}

我在我的视图中在一些JS中引用它们如下:

dateLabels = <%= raw @mapped_dates.to_json %>;

当我访问该页面时,出现以下错误:

can't iterate from ActiveSupport::TimeWithZone

奇怪的是,我可以在Rails控制台中运行Ruby,它会返回我期望的内容:["Jan 1", "Jan 2", "Jan 3", ... ]

有没有人知道可能导致此错误的原因是什么?

2 个答案:

答案 0 :(得分:1)

您可以尝试:

 dateLabels = <%= raw @mapped_dates.as_json %>;

这将返回

 ["Jan 1", "Jan 2", "Jan 3", ... ]

对于ActiveSupport::TimeWithZone问题,请执行 -

在config / initializers / time_zone.rb

  class ActiveSupport::TimeWithZone
    def as_json(options = {})
      if ActiveSupport::JSON::Encoding.use_standard_json_time_format
        xmlschema
      else
        %(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)})
      end
    end
  end 

答案 1 :(得分:0)

您将错误的数组传递给您的视图。它应该是:

dateLabels = <%= raw @mapped_dates.to_json %>;