可以将ActiveScaffold配置为在显示列表之前显示搜索表单吗?

时间:2009-01-28 22:55:11

标签: ruby-on-rails configuration activescaffold

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

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

2 个答案:

答案 0 :(得分:1)

我通过在控制器中定义 conditions_for_collection 方法找到了解决方案。它有点像黑客,但它很简单(3行)并且有效:

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

这是怎么回事:当你要求列表时,调用控制器的 list 方法,由ActiveScaffold处理。 ActiveScaffold调用 conditions_for_collection ,由于操作是 list (不是 update_table ),上面的conditions_for_collection方法返回“1 = 2”,当然这当然导致一个空列表。

用户可以单击“搜索”按钮,然后启动搜索。这会调用 update_table 操作,同样ActiveScaffold调用 conditions_for_collection ,这次返回“”(没有过滤器),因此搜索整个列表。

它不是很漂亮,但它确实起作用。

答案 1 :(得分:0)

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

这样的事情:

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

然后,您必须实现自己的索引方法,该索引方法具有自己的模板,依此类推。切换回Active Scaffold的搜索操作。我不确定你是怎么做到这一点的,但是如果你看一下原始页面的HTML源代码,那么你应该很清楚它与搜索链接的动作是什么。