Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby将不同的属性参数传递给同一个函数_Ruby On Rails_Ruby_Functional Programming_Function - Fatal编程技术网

Ruby on rails Ruby将不同的属性参数传递给同一个函数

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等。因此,我必须创

我有一个工作模式,它有许多属性。我想用图形来显示这些属性的总和。为此,我在生成图形的视图的javascript部分中使用以下代码:

<% 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