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专家)。今晚我们会更深入地调查。我想我能理解这种风格,但我该如何处理到目前为止,到现在为止,到现在为止,这也取决于选择的项目?哇!那是很多违法行为。。。