Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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 我应该在Rails中将图表绘制代码放在哪里?_Ruby On Rails_Model View Controller_Drawing_Code Organization - Fatal编程技术网

Ruby on rails 我应该在Rails中将图表绘制代码放在哪里?

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 将其作为单独的操作放入控制器中 把它放在一个助手里 这方面的主流观点是什么?如果您认为可以将图表代码用于其他用途,请将其设置为类,

我有一些定制的Ruby代码,用于根据模型的内容生成图表(通常在“show”视图中显示为内联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)该模型所需的东西-因此您确实希望它作为不同包/模块/对象/等的一部分
  • 图表的Ruby对象IMHO不应该“知道”如何将自己转换为HTML视图。这是分部的工作-
    \u chart.svg.erb
    \u chart\u typeB.svg.erb
    -但它应该“知道”如何转换其信息-计数、平均值、百分比等。分部然后使用这些不同的“格式”
  • 我敢打赌,在某个时刻,您将希望通过API直接访问图表数据。也许你正在把你的东西变成一个平台,也许你正在对当前页面进行AJAX更新;没关系-您最终会希望一些控制器操作直接访问图表数据
  • 你应该把任何复杂的东西从视图部分中去掉,把它们变成助手,但是部分人仍然应该负责“样式”。也就是说,分部应该生成图表的最小原子视图-只有图表,只有图表-但是分部应该是您希望在网页中包含图表时通常要显示的任何其他内容

  • 编辑:稍微阅读一下另一个答案,我有一个不同的假设:我假设您获取图表信息并通过网页上的Javascript生成图片,而不是在服务器上生成图片并提供服务。如果你要做后者,我会把它作为图表类的一部分——它是一种不同的“格式”,可以将数据转换成不同的格式。

    是的,我也想到了这个想法。然而,在这个特定的案例中,它非常特定于这个单一的用例,我可以保证它的“重用价值”大约为0。。。。然而,我认为这仍然是最好的方式。谢谢是的,我在做后者。我认为把它作为一个部分来做的问题是,代码最终看起来非常难看。绘制图表需要大量的数学运算(寻找坐标、直线的斜率等),将这些东西混合到erb或haml部分会让我心惊胆战。在无数的小助手方法和从分部调用它们之间来回切换似乎没有什么好处-将所有图表代码保存在一个文件中肯定会很好。对,但我要说的是,视图代码应该使用一些简单的JSON,比如说,列出点,然后你的目标代码会做所有繁重的计算。如果在实际绘制过程中涉及到繁重的数学计算,那么您应该使用它创建自己的Javascript图表库,或者使用其他人的。有很多,有的是免费的,有的不是。是的,在实际的绘图代码中涉及到繁重的数学运算。我用Ruby而不是Javascript来做,因为我用Ruby更舒服。我花了一个小时左右的时间浏览了各种图表库(包括几个主要的Javascript库),但这是一种非常特殊的图表类型,似乎需要进行大量过早的删节,才能让它们中的任何一个生成我想要的定制输出。听起来,将绘图代码分解为自己的一个类(将其放入
    lib/
    )可能是最接近正确的方法。是的。您也可以查看Opal,它将Ruby编译为Javascript,但我敢打赌您使用的库会阻止这种选择。