Ruby on rails Ruby将不同的属性参数传递给同一个函数
我有一个工作模式,它有许多属性。我想用图形来显示这些属性的总和。为此,我在生成图形的视图的javascript部分中使用以下代码:Ruby on rails Ruby将不同的属性参数传递给同一个函数,ruby-on-rails,ruby,functional-programming,function,Ruby On Rails,Ruby,Functional Programming,Function,我有一个工作模式,它有许多属性。我想用图形来显示这些属性的总和。为此,我在生成图形的视图的javascript部分中使用以下代码: <% for job in @daily_jobs %> ['<%= job.day %>',<%= job.walltime %>], <% end %> 这很好用。然而,我不仅想创建atribute walltime的图形,还想创建许多其他atribute的图形:内存、cpu等。因此,我必须创
<% for job in @daily_jobs %>
['<%= job.day %>',<%= job.walltime %>],
<% end %>
这很好用。然而,我不仅想创建atribute walltime的图形,还想创建许多其他atribute的图形:内存、cpu等。因此,我必须创建以下函数:
<% for job in @daily_jobs %>
['<%= job.day %>',<%= job.cpu %>],
<% end %>
会回来吗
['<%= job.day %>',<%= job.cpu %>],
['<%= job.day %>',<%= job.walltime %>],
会回来吗
['<%= job.day %>',<%= job.cpu %>],
['<%= job.day %>',<%= job.walltime %>],
UPD
你可以做一些简单的事情
attr_list = [:cpu, :walltime, :memory]
然后遍历作业
<% for job in @daily_jobs %>
<% attr_list.each do |attr| %>
['<%= job.day %>',<%= job.send(attr) %>],
<% end %>
<% end %>
并使用
<% for job in @daily_jobs %>
<% attr_list.each do |attr| %>
<%= job.as_js_attr(attr) %>
<% end %>
<% end %>
您可以向作业类中添加几个方法来实现此目的:
class Job
# returns "[['2010.07.25', 145], ['2010.07.26', 143]]"
def self.graph_data jobs, attr
data = jobs.collect {|j| j.graph_item_for attr}.join(', ')
"[#{data}]"
end
# returns ['2010.07.25', 14]
def graph_item_for attr
"['#{self.day}', #{self.send(attr)}]"
end
end
然后叫它:
cpu_graph_data = Job.graph_data @daily_jobs, :cpu
你好,Fantactuka,恐怕我没有遵循您的解决方案,据我所知,我仍然必须在for in循环中指定,这是我需要访问的atribute。我想到的是一个函数,比如functionattribute,它可以执行job.attributes。您想要获取属性名称并返回[date,attr]、[date,attr]?确切地说,例如:functioncpu将返回[,],functionwalltime将返回[,],
<% for job in @daily_jobs %>
<% attr_list.each do |attr| %>
['<%= job.day %>',<%= job.send(attr) %>],
<% end %>
<% end %>
def as_js_attr(attr)
"['#{self.day}', #{self.send(attr)}],"
end
<% for job in @daily_jobs %>
<% attr_list.each do |attr| %>
<%= job.as_js_attr(attr) %>
<% end %>
<% end %>
class Job
# returns "[['2010.07.25', 145], ['2010.07.26', 143]]"
def self.graph_data jobs, attr
data = jobs.collect {|j| j.graph_item_for attr}.join(', ')
"[#{data}]"
end
# returns ['2010.07.25', 14]
def graph_item_for attr
"['#{self.day}', #{self.send(attr)}]"
end
end
cpu_graph_data = Job.graph_data @daily_jobs, :cpu