Ruby on rails 元编程Ruby

Ruby on rails 元编程Ruby,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一段代码: @timesheets.each do |ts| row = [ ts.time_start.to_date, ts.time_start.to_time, ts.time_end.to_time, ts.task_link.project.client.name, ts.task_link.project.name, ts.task_link.task.name, ts.notes ] row.pop(3) i

我有一段代码:

@timesheets.each do |ts|
  row = [
    ts.time_start.to_date,
    ts.time_start.to_time,
    ts.time_end.to_time,
    ts.task_link.project.client.name,
    ts.task_link.project.name,
    ts.task_link.task.name,
    ts.notes
  ]
  row.pop(3) if !@time_report.show_money
  sheet.add_row row, :style => [date_format, time_format, time_format, nil, nil, nil, nil, nil, nil, nil, nil, money_format, money_format, nil]
end
现在我希望用户能够自己设置订单。我将创建一个包含所有可能值(以及匹配样式)的哈希。但是我如何将其整合到这个过程中呢?我查阅了一些关于元编程的信息,但似乎主要是使用define_方法。这是最好的选择吗

编辑:我认为我拥有它是因为我可以做到:

Fields = [{'fieldname' => 'time_start', 'caption' => 'Date', 'type' => 'to_date', 'style' => 'date_format'},
{'fieldname' => 'time_start', 'caption' => 'Start', 'type' => 'to_time', 'style' => 'time_format'},
{'fieldname' => 'time_end', 'caption' => 'End', 'type' => 'to_time', 'style' => 'time_format'}]
...
然后可以这样查询:

@timesheets.each do |ts|
  row = []
  Fields.each do |f|
    row.append(ts[f].to_date)
  end
end
我在这方面遇到的两个问题是:

如何处理“ts.task_link.project.client.name”

ts[task_link.project.client.name] 
这是不可能的


第二个问题:如何集成到日期、到时间等

一个抽象级别会使这变得更简单。创造

行条目和行

类封装了数据格式知识并简单地询问每个条目的显示格式。我真的不认为需要任何元编程

这条线

sheet.add_row row, :style => [date_format, time_format, time_format, nil, nil, nil, nil, nil, nil, nil, nil, money_format, money_format, nil]
变成

sheet.add_row row.entries, row.style
更多详情:

RowEntry本质上是一个记录值和显示样式的结构


Row是RowEntry对象的数组,它知道如何从RowEntry对象提取值的普通数组和样式的普通数组

嗨,弗雷德,我还没有看到它(我不是Ruby专家)。今晚我们会更深入地调查。我想我能理解这种风格,但我该如何处理到目前为止,到现在为止,到现在为止,这也取决于选择的项目?哇!那是很多违法行为。。。