0

我在 Rails 4 中遇到 Chartkick 时间线图表的问题。当页面加载时,会抛出此错误:

“未定义的方法 `each_pair' for#< Array:... >”

在 Chartkick 代码中如下图所示;

 def chartkick_deep_merge(hash_a, hash_b)
  hash_a = hash_a.dup
  hash_b.each_pair do |k, v|
    tv = hash_a[k]
    hash_a[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_merge(v) : v
  end
  hash_a
end

我尝试了使用 to_json、as_json、@events.each do ...、@events.map... 的代码的各种迭代... select(:id, :event_types, :starttime, :endtime).where(project_masters_id: params[:proj_id], phase_masters_id: params[:id])

变量似乎设置正确,如 hash_b 所示

hash_a  
{:width=>"400px", :height=>"400px", :colors=>["#B9D3EE", "#9FB6CD", "#A2CD5A", "#6E8B3D", "#FFB90F", "#E3A869"]}

hash_b  
[[#<Events id: 1, event_types: "Estimating", starttime: "2015-10-05 11:15:00", endtime: "2015-10-13 21:15:00">], [#<Events id: 2, event_types: "Roll Forming", starttime: "2015-09-09 11:00:01", endtime: "2015-09-16 18:29:59">], [#<Events id: 7, event_types: "Magest On Site", starttime: "2015-09-25 11:00:01", endtime: "2015-09-25 18:29:59">]]

view:
 <div id = "chart-1"> </div>
   <%= 
    timeline("chart-1", @events.map { |evnt| [evnt] } )
   %>


controller:
@events = Events.select(:id, :event_types, :starttime, :endtime).where(project_masters_id: params[:proj_id], phase_masters_id: params[:id])
        respond_to do |format|
            format.html
            format.json {render json: @events}
        end

任何有关获得此运行的帮助将不胜感激。

4

1 回答 1

0

似乎您将数组传递Events给方法timeline,该方法需要一个三元组数组(数组类型)。

我不确定我是否正确阅读了您的代码,但似乎调用 totimeline可能类似于

timeline("chart-1", @events.map { |evnt| [evnt.types, evnt.starttime, evnt.endtime] })

于 2015-12-09T00:24:30.153 回答