我有一个应用程序,它允许用户从包含许多列的单个大表中钻取数据。它是这样工作的:
-
屏幕上有一个不同的顶级表值列表
-
用户点击它,然后列表改变为不同的下一级值,无论点击什么
-
用户点击其中一个值,取到第三级值,等等
他们可以通过大约50个属性,但通常最终只有3或4个。但由于这3或4个属性在50个可能的属性中有所不同,因此我必须将选择保存到浏览器中。现在我用一种丑陋而笨重的隐藏形式。它是有效的,但它是微妙的和次优的。为了使它工作,无论屏幕上的级别属性的值是什么,都要在单击事件的隐藏表单上的适当位置填充,然后使用jQuery Ajax POST提交表单。丑。
我也看过Backbone.js,但我不想在这个项目中加入另一个工具包,而可能有一些其他简单的约定我错过了。有这样做的标准Rails Way
吗,还是有更好的方法?
单表下钻取的可能方法
如果您希望从包含大量列的单个表中执行列选择,您可以考虑以下几种基本方法:
- 使用客户端JavaScript库根据需要显示/隐藏列。例如,您可以使用datattables根据与所选的最后一个值(或一组值)相关的内容动态调整显示的列。
- 您可以在视图中使用表单将相关的列名称传递到会话或参数哈希中,并检查这些值,以便在深入到下一层时在视图中呈现哪些列。
- 您的下一个服务器端请求可以包含感兴趣的列列表,您的控制器可以使用这些列名来使用SELECT或#pluck构建自定义查询。此类查询通常涉及受污染的对象,因此要彻底清理输入并小心处理!
- 如果你的数据库支持视图,用户可以从下一个控制器动作中选择预定义的或动态的视图,这可能会或可能不会更性能。这至少是一个值得追求的想法,但你必须仔细地对其进行基准测试,并确保你不会以SQL注入或无法管理的数量的预定义视图来维护结束。
另一件需要考虑的事情是,Rails不会阻止你做违背基本的面向资源的MVC模式的事情。从你的问题来看,有一个隐含的假设,即你没有每个数据资源的规范表示;以这种方式接近Rails通常会增加复杂性。如果这种复杂性确实是满足应用程序需求所必需的,那也可以,但是我当然建议仔细评估您的基本设计目标,看看功能权衡和长期维护负担是否值得。
我在Stack Overflow上发现了类似的问题;似乎没有一个API或风格有人提到跨请求持久化。你能做的最好的事情似乎是在类中存储,或者在你已经做的事情上进行一些迭代:
1)会话/请求之间的内存持久性
2)处理请求持久性设计
3)使用类缓存