1

我有一个应用程序,它允许用户从具有许多列的单个大表中向下钻取数据。它是这样工作的:

  • 屏幕上有一个不同的顶级表值列表。

  • 用户单击它,然后列表更改为单击的任何内容的不同的下一级值。

  • 用户单击其中一个值,进入第三级值等。

他们可以通过大约 50 个属性,但通常最终只有 3 或 4 个。但由于这 3 或 4 个在 50 个可能的属性中有所不同,我必须将选择保留到浏览器。现在我以一种可怕而笨重的隐藏形式来做这件事。它有效,但它是微妙的和次优的。为了使其工作,屏幕上的任何级别属性的值都将填充到单击事件的隐藏表单上的适当位置,然后 jQuery Ajax POST 提交表单。丑陋的。

我也看过 Backbone.js,但我不想在这个项目中加入另一个工具包,因为我可能缺少一些其他简单的约定。有没有Rails Way做这样的事情的标准,或者只是一些更好的方式时期?

4

2 回答 2

2

单表向下钻取的可能方法

如果您想从具有大量列的单个表中执行列选择,您可以考虑一些基本方法。

  1. 使用客户端 JavaScript 库按需显示/隐藏列。例如,您可以使用DataTables根据与所选最后一个值(或一组值)相关的内容来动态调整显示哪些列。
  2. 您可以在视图中使用表单将相关列名称传递到会话或参数哈希中,并检查这些值以在深入到下一个级别时在视图中呈现哪些列。
  3. 您的下一个服务器端请求可能包含感兴趣的列列表,并且您的控制器可以使用这些列名称来构建使用SELECT#pluck的自定义查询。此类查询通常涉及受污染的对象,因此请彻底清理输入并小心处理!
  4. 如果您的数据库支持视图,用户可以从下一个控制器操作中选择预定义或动态视图,这可能会或可能不会更高性能。这至少是一个值得追求的想法,但是您必须仔细地对此进行基准测试,并确保您最终不会遇到 SQL 注入或需要维护的无法管理的预定义视图数量。

一些注意事项

在决定是在客户端还是服务器端处理此类功能时,通常需要在内存和延迟之间进行权衡。通常还值得重新审视拥有一个巨大的非规范化表背后的业务逻辑,并调查是否不能将问题域分解为一组更易于管理的 RESTful 资源。

要考虑的另一件事是,Rails 不会阻止您做违反基本面向资源的 MVC 模式的事情。从您的问题来看,隐含的假设是您没有每个数据资源的规范表示;以这种方式接近 Rails 通常会增加复杂性。如果确实需要这种复杂性来满足您的应用程序的要求,那很好,但我当然建议您仔细评估您的基本设计目标,看看功能权衡和长期维护负担是否值得。

于 2013-01-13T17:19:59.540 回答
1

我在 Stack Overflow 上发现了与您类似的问题;似乎没有任何人提到的用于跨请求持久化的 API 或样式。你能做的最好的似乎是在类中存储或对你已经在做的事情进行一些迭代:

1)会话/请求之间的内存持久性

2)以设计方式处理请求持久性

3)使用类缓存

于 2013-01-07T20:17:31.977 回答