Ruby on rails 我应该在Rails中将图表绘制代码放在哪里?
我有一些定制的Ruby代码,用于根据模型的内容生成图表(通常在“show”视图中显示为内联SVG) 我想知道我应该把绘图代码放在哪里。在我看来,我可以:Ruby on rails 我应该在Rails中将图表绘制代码放在哪里?,ruby-on-rails,model-view-controller,drawing,code-organization,Ruby On Rails,Model View Controller,Drawing,Code Organization,我有一些定制的Ruby代码,用于根据模型的内容生成图表(通常在“show”视图中显示为内联SVG) 我想知道我应该把绘图代码放在哪里。在我看来,我可以: 把它放在模型中,这样我就可以在我的视图中调用@my\u object.chart\u作为\u svg。。。但这与MVC有所不同 将它放在一个视图中,比如show.svg.erb,让我的控制器响应format.svg 将其作为单独的操作放入控制器中 把它放在一个助手里 这方面的主流观点是什么?如果您认为可以将图表代码用于其他用途,请将其设置为类,
@my\u object.chart\u作为\u svg
。。。但这与MVC有所不同show.svg.erb
,让我的控制器响应format.svg这方面的主流观点是什么?如果您认为可以将图表代码用于其他用途,请将其设置为类,将其放入
lib
并进行设置,以便在控制器中执行类似操作:
@chart = MyChart.new(:data => @my_object.data_method, :title => 'Foo Chart', ....)
send_data @chart.to_svg, ...
通过这种方式,您可以使用其他选项扩展它,将
。添加到\u png
,等等,而不会弄脏您的模型。IMO:一切都有一点点!下面是您的列表:
@obj.chart
,但图表不是模型的一部分-它可以使用模型数据创建,但它不是a)限制于该模型或b)该模型所需的东西-因此您确实希望它作为不同包/模块/对象/等的一部分\u chart.svg.erb
,\u chart\u typeB.svg.erb
-但它应该“知道”如何转换其信息-计数、平均值、百分比等。分部然后使用这些不同的“格式”编辑:稍微阅读一下另一个答案,我有一个不同的假设:我假设您获取图表信息并通过网页上的Javascript生成图片,而不是在服务器上生成图片并提供服务。如果你要做后者,我会把它作为图表类的一部分——它是一种不同的“格式”,可以将数据转换成不同的格式。是的,我也想到了这个想法。然而,在这个特定的案例中,它非常特定于这个单一的用例,我可以保证它的“重用价值”大约为0。。。。然而,我认为这仍然是最好的方式。谢谢是的,我在做后者。我认为把它作为一个部分来做的问题是,代码最终看起来非常难看。绘制图表需要大量的数学运算(寻找坐标、直线的斜率等),将这些东西混合到erb或haml部分会让我心惊胆战。在无数的小助手方法和从分部调用它们之间来回切换似乎没有什么好处-将所有图表代码保存在一个文件中肯定会很好。对,但我要说的是,视图代码应该使用一些简单的JSON,比如说,列出点,然后你的目标代码会做所有繁重的计算。如果在实际绘制过程中涉及到繁重的数学计算,那么您应该使用它创建自己的Javascript图表库,或者使用其他人的。有很多,有的是免费的,有的不是。是的,在实际的绘图代码中涉及到繁重的数学运算。我用Ruby而不是Javascript来做,因为我用Ruby更舒服。我花了一个小时左右的时间浏览了各种图表库(包括几个主要的Javascript库),但这是一种非常特殊的图表类型,似乎需要进行大量过早的删节,才能让它们中的任何一个生成我想要的定制输出。听起来,将绘图代码分解为自己的一个类(将其放入
lib/
)可能是最接近正确的方法。是的。您也可以查看Opal,它将Ruby编译为Javascript,但我敢打赌您使用的库会阻止这种选择。