我有一些自定义 Ruby 代码用于根据模型的内容生成图表(通常在“显示”视图中显示为内联 SVG)。
我想知道我应该把绘图代码放在哪里。如我所见,我可以:
- 把它放在模型中,这样我就可以
@my_object.chart_as_svg
在我的视图中调用......但这会与 MVC 不同 - 把它放在一个视图中,比如
show.svg.erb
,让我的控制器响应 format.svg - 将其作为单独的操作放入控制器中
- 把它放在一个助手...
这方面的普遍智慧是什么?
我有一些自定义 Ruby 代码用于根据模型的内容生成图表(通常在“显示”视图中显示为内联 SVG)。
我想知道我应该把绘图代码放在哪里。如我所见,我可以:
@my_object.chart_as_svg
在我的视图中调用......但这会与 MVC 不同show.svg.erb
,让我的控制器响应 format.svg这方面的普遍智慧是什么?
如果您认为您可以将图表代码重用于其他事情,请将其设为一个类,放入lib
并设置它,以便您可以在控制器中执行以下操作:
@chart = MyChart.new(:data => @my_object.data_method, :title => 'Foo Chart', ....)
send_data @chart.to_svg, ...
..
通过这种方式,您可以使用其他选项扩展它,添加.to_png
等,而不会破坏您的模型。
国际海事组织:什么都有一点!往下看你的清单:
@obj.chart
,但图表不是模型的一部分 - 它可以使用模型数据创建,但它不是 a) 受限于该模型或 b) 该模型所需的东西 -所以你确实希望它作为不同包/模块/对象/等的一部分_chart.svg.erb
,_chart_typeB.svg.erb
- 但它应该“知道”如何转换其信息 - 计数、平均值、百分比等。然后,部分使用这些不同的“格式”。编辑:稍微阅读其他答案,我有一个不同的假设:我假设您获取图表信息并通过网页上的 Javascript 生成图片,而不是在服务器上生成图片并提供图片。如果你在做后者,我会把它作为图表类的一部分——它是一种不同的“格式”,数据可以转换成这种格式。