2017-11-29 28 views
1

私は投票を作成したり、公開したりできる投票アプリケーションを持っています。管理者はすべてを見ることができます。ユーザーは公開したものだけです。 それから私はフィルタリングするためにransackを使用しています。複数のインスタンスでRails ransackフィルタ

これは私のコントローラです:

@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追加投票の2つのインスタンスを作成するために必要に応じて。そして、私はこれが正しいアプローチであるとは確信していません。私の見解では

は私が持っている掻き回すフィルタの場合

<% @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

関連する問題