【问题标题】:Can ActiveScaffold be configured to show the search form before displaying a list?是否可以将 ActiveScaffold 配置为在显示列表之前显示搜索表单?
【发布时间】:2009-01-28 22:55:10
【问题描述】:

当我要求 ActiveScaffold 向我显示一个很长的列表(例如已售产品的列表)时,它会运行数据库查询以获取第一页数据并显示它。如果列表有一些关系,则此查询可能需要一些时间来执行(超过一秒)。大多数时候,我对这个“未过滤”列表不感兴趣:我要做的第一件事就是点击“搜索”并过滤掉这个列表。

有什么方法可以告诉 ActiveScaffold 在调用列表操作时显示未过滤的列表?我希望它只显示搜索表单,等待输入一些条件,然后然后显示过滤后的列表。

【问题讨论】:

    标签: ruby-on-rails configuration activescaffold


    【解决方案1】:

    我通过在控制器中定义 conditions_for_collection 方法找到了解决方案。这是一种 hack,但它很简单(3 行)并且有效:

    def conditions_for_collection
      params[:action]=="update_table" ? "" : "1=2"
    end
    

    事情是这样的:当你请求列表时,控制器的 list 方法被调用,由 ActiveScaffold 处理。 ActiveScaffold 调用 conditions_for_collection,由于 action 是 list(不是 update_table),所以上面的 conditions_for_collection 方法返回“1=2”,这当然是导致一个空列表。

    用户可以点击“搜索”按钮,启动搜索。这将调用 update_table 操作,ActiveScaffold 再次调用 conditions_for_collection,这一次返回 ""(无过滤器),因此搜索整个列表。

    它不是很漂亮,但它确实可以。

    【讨论】:

      【解决方案2】:

      您可能需要覆盖#index 操作并提供您自己的模板。似乎没有任何方法可以告诉它不显示该列表。

      类似这样的:

      active_scaffold :models do |config|
          config.actions.exclude :index
      end
      

      然后你必须实现你自己的索引方法,它有它自己的模板等等。交回 Active Scaffold 的搜索操作。我不确定你是怎么做到的,但是如果你查看原始页面的 HTML 源代码,你应该很清楚它链接到的操作是什么。

      【讨论】:

        猜你喜欢
        • 2012-04-16
        • 2015-07-20
        • 1970-01-01
        • 2014-08-11
        • 2011-02-08
        • 2016-03-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多