2017-11-29 13 views
1

나는 설문 조사를 작성하거나 게시 할 수있는 설문 조사 응용 프로그램을 보유하고 있습니다. 관리자는 모두를 볼 수 있습니다. 사용자는 하나만 게시했습니다. 그런 다음 필터를 사용하려고합니다. 내가 설문 조사의 두 인스턴스를 만들 필요에 따라여러 인스턴스에 랠락 필터

@q = Poll.includes(:division).includes(:vote_options).ransack(params[:q]) 
    @p = Poll.where(published: '1').includes(:division).includes(:vote_options).ransack(params[:p]) 
    @polls = @q.result.order(:sort) 
    @published_polls = @p.result.order(:sort) 
    @display_polls = current_user.admin_role? ? @polls : @published_polls 

내가 @q 옆에 @p 추가 :

내 컨트롤러입니다. 그리고 이것이 올바른 접근법인지 확신 할 수 없습니다. 내보기에서

나는 내가 가진 더듬다 필터를 들어

<% @display_polls.each_with_sortable_id do |poll, sortable_id| %> 

있습니다

<%= search_form_for @q, url: polls_path do |f| %> 

게시 예상대로 게시되지 않은 항목이 올바르게 표시됩니다. 그러나 흘림 필터는 작동하지 않습니다.

필터를 다시 작동 시키려면 어떻게해야합니까?

답변

1

귀하의 search_form_for이 @q에서만 검색 중이기 때문일 수 있습니다. 나는 이것이 당신의 컨트롤러에서 더 나은 접근법이라고 생각한다 :

if current_user.admin_role? 
    @q = Poll.includes(:division, :vote_options).ransack(params[:q]) 
else 
    @q = Poll.where(published: '1').includes(:division, :vote_options).ransack(params[:q]) 
end 

@polls = @q.result.order(:sort) 
+1

그것은 쉬웠다. 고마워요! – Catmal