1

ActiveScaffold に非常に長いリスト (販売された製品のリストなど) を表示するように依頼すると、データベース クエリを実行してデータの最初のページを取得し、それを表示します。リストにいくつかの関係がある場合、このクエリの実行には時間がかかる場合があります (1 秒以上)。ほとんどの場合、この「フィルタリングされていない」リストには興味がありません。最初にやりたいことは、「検索」をクリックして、このリストをフィルタリングすることです。

リスト アクションが呼び出されたときに、フィルター処理されていないリストを表示しないように ActiveScaffold に指示する方法はありますか? 単純に検索フォームを表示し、いくつかの条件が入力されるのを待ってから、フィルタリングされたリスト表示したいと思います。

4

2 に答える 2

1

コントローラでconditions_for_collectionメソッドを定義することで解決策を見つけました。これは一種のハックですが、単純で(3行)、機能します。

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

これがその方法です。リストを要求すると、コントローラーのlistメソッドが呼び出され、ActiveScaffoldによって処理されます。ActiveScaffoldはconditions_for_collectionを呼び出し、アクションはlistupdate_tableではない)であるため、上記のconditions_for_collectionメソッドは「1 =2」を返します。これはもちろん空のリストになります。

ユーザーは「検索」ボタンをクリックして検索を開始できます。これによりupdate_tableアクションが呼び出され、ActiveScaffoldはconditions_for_collectionを呼び出します。これは、今回は ""(フィルターなし)を返すため、リスト全体が検索されます。

それは本当に美しくはありませんが、それは仕事をします。

于 2009-01-30T10:38:23.897 に答える
0

おそらく、#indexアクションをオーバーライドして、独自のテンプレートを提供する必要があります。そのリストを表示しないように指示する方法はないようです。

このようなもの:

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

次に、独自のテンプレートなどを持つ独自のインデックスメソッドを実装する必要があります。ActiveScaffoldの検索アクションに戻ります。どのようにそれを行うかはわかりませんが、元のページのHTMLソースを見ると、検索を実行するためにリンクしているアクションがかなり明確になっているはずです。

于 2009-01-29T20:01:52.230 に答える