Kev*_*eil 12 ruby model-view-controller dashboard ruby-on-rails
我正在实现一个仪表板作为相对Rails新手(更多的基础设施人).仪表板将包含多个页面,每个页面将包含多个图表/表格等.对于模块化,我希望它尽可能简单地添加新图表或更改数据视图.
假设一页有5个不同的图表.我可以让控制器执行5次单独的数据查找,将所有相关数据保存在实例变量中,并渲染5个部分,每个部分触摸数据的子集.但似乎更模块化的是有一个"索引"控制器动作,其渲染具有一堆div,并且对于每个div,还有另一个控制器动作,它执行数据查找并具有部分负责管理该数据视图的关联视图在div内.
所以,如果我展示它有两个图的网站仪表盘页面,website/index会使用website/graph1和website/graph2查找每一个,然后将数据_graph1.html.erb和_graph2.html.erb将使用控制器的数据填写申报单"graph1"和"graph2"等
这是正确的设计,如果是这样,最简单的方法是什么?我有使用近似remote_function与:action => "graph1"填写申报单,但我很高兴它不是100%.我怀疑我错过了Rails会为我做的更容易的事情.
Sai*_*Sai 10
我实际上在生产中使用的简单方法:iframes.
大多数情况下,如果页面一次性呈现并直接来自服务器,您实际上并不关心,实际上它最好是交错加载.
如果您只是将iframe src添加到控制器的show动作中,那么您将拥有一个非常简单的解决方案,不需要直接的跨控制器交互.
优点:
缺点:
使用JS调用做同样的事情来替换div的部分,àla:
<div id="placeholder">
<%= update_page {|page| page['placeholder'].replace with some partial call here } %>
Run Code Online (Sandbox Code Playgroud)
与上述相同,除了:
优点:
缺点:
召唤一大堆部分人.一旦你谈论仪表板等各个模块都有大量设置逻辑的事情,那么这很复杂.
有很多种方法可以通过将这些东西变成'mixins'之类来解决这个问题,但是IMO它们有点像kludgy.
ETA:通过mixins来实现它的方法是创建一个实际上是一个库文件来实现模块控制器的设置功能,包括那些调用'em'的地方,并调用它们.
但是,这有缺点:
可以从另一个控制器调用一个控制器中的方法.然而,这是屁股上的一个主要痛苦,也是一个主要的问题.你应该考虑这样做的唯一一次是a)他们在自己的权利中都是独立必要的控制者,而b)它必须完全在后端运作.
我曾经不得不这样做 - 主要是因为重构它的原因甚至更加痛苦 - 而且我保证除非你必须这样做,否则你不想去那里.
最好的方法IMHO是第一个,如果你有足够复杂的东西,他们需要重要的设置 - 一个简单的iframe显示模块,传递参数告诉它使用超极简主义布局(只是CSS + JS标题),因为它没有显示作为自己的页面.
这使您可以保持事物完全独立,功能或多或少,就好像它们是完全正常的控制器(布局设置除外),保持正常路线等.
如果你不需要重要的设置,那么只需使用partials,并将他们需要的任何东西作为局部变量传递.如果你遇到像n + 1效率错误这样的事情,这将开始变得脆弱,但......