목록을 표시하기 전에 ActivesCaffold를 검색 양식을 표시하도록 구성 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/489798

문제

ActivesCaffold에 매우 긴 목록 (예 : 판매 된 제품 목록)을 표시하도록 요청하면 데이터베이스 쿼리를 실행하여 데이터의 첫 페이지를 가져 와서 표시합니다. 목록에 몇 가지 관계가 있으면이 쿼리는 실행하는 데 시간이 걸릴 수 있습니다 (초 이상). 대부분의 경우,이 "필터링되지 않은"목록에 관심이 없습니다. 가장 먼저하고 싶은 것은 "검색"을 클릭 하고이 목록을 필터링하는 것입니다.

ActivesCaffold에게 말할 수있는 방법이 있습니까? ~ 아니다 목록 조치가 호출 될 때 필터링되지 않은 목록을 표시하려면? 검색 양식을 간단히 표시하고 일부 기준이 입력 될 때까지 기다리겠습니다. 그 다음에 필터링 된 목록을 표시합니다.

도움이 되었습니까?

해결책

정의하여 해결책을 찾았습니다 조건 _for_collection 컨트롤러의 메소드. 그것은 일종의 해킹이지만 간단하고 (3 줄) 작동합니다.

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

이것이 어떻게 진행되는지 : 목록을 요청할 때 컨트롤러의 목록 메소드는 ActivesCaffold에 의해 처리됩니다. ActivesCaffold 전화 조건 _for_collection, 그리고 행동이 있기 때문에 목록 (아니다 update_table), 위의 조건 _for_collection 메소드는 "1 = 2"를 반환하며, 이는 물론 빈 목록으로 이어집니다.

사용자는 "검색"버튼을 클릭하고 검색을 시작할 수 있습니다. 이것은라고 부릅니다 update_table Action, ActiveScaffold Call 조건 _for_collection,이 시간은 ""(필터 없음)가되므로 전체 목록이 검색됩니다.

정말 아름답지는 않지만 일을합니다.

다른 팁

당신은 아마도 그것을 무시해야 할 것입니다 #index 조치를 취하고 자신의 템플릿을 제공합니다. 해당 목록을 표시하지 않는 방법이없는 것처럼 보이지 않습니다.

이 같은:

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

그런 다음 자체 템플릿 등이있는 고유 한 색인 메소드를 구현해야합니다. Active Scaffold의 검색 조치로 돌아가십시오. 어떻게 그렇게할지 잘 모르겠지만, 원래 페이지의 HTML 소스를 보면 다시 연결되는 작업이 검색을 수행하는 조치가 명확해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top