2016-06-21 13 views
0

私はRuby on Rails開発の初心者です。私は、言語を学ぶためにwww.railstutorial.orgのガイドを改訂しています。will_paginateで検索結果をフィルタリングする

def index 
    @users = User.paginate(page: params[:page]) 
end 

このコードは、ページ上のデータベース内のすべてのユーザーを示しています。私はこのように始まったインデックス機能を持っている

:ここに私の状況です。しかし、私のユーザーはチームのメンバーです(ユーザーのteam_id列で表示されます)。サインインしたユーザーにはチームメンバーのみが表示されます。ページがうまく動作し続けているので、私は励まされた

def index 
    @filter = User.all 
    @users = @filter.paginate(page: params[:page]) 
end 

:だから、私が知っているものを使用して試して、私はこれを試してみました。しかし、できるだけ早く私は@Filterする実際のクエリまたは方法の任意の並べ替えを追加すると、私は、ブラウザで次のエラーを取得:

undefined method `paginate' for #<Array:0x00000001b18a90> 

をし、それが問題として

@users = @filter.paginate(page: params[:page]) 

行を識別します。

User.where(team_id: 1).take(50) 

は私が期待する結果を返します。これらの検索クエリは、次のような、私はレールコンソールの後だ、まさに私を与えます。私は@Filterを削除し、コードを変更した場合も、次のように:それは完璧に動作

def index 
    @users = User.where(team_id: current_user.team_id).all 
end 

。 ページングに問題があるのはなぜですか?すべてが、それはそれが全体のテーブルよりも少ない手渡されるとすぐに変なのですか?

(編集:いくつかの実験の後、will_paginateはテーブルを渡すことを期待しているので、私はそれが欲しい機能を得ていると思うが、他の誰かが質問に答えるかもしれないと思った私はそれを残しています。また、以下のコードがwill_paginateのためにうまくいかない理由についての洞察はありましたが、以前のものは理解できませんでした)。

ソリューション(ユーザーはすべてのチームを見ることができるようにする必要があります管理者、であるかどうかを確認するテストを含みます):

def index 
if @current_user.admin == true 
    @users = User.paginate(page: params[:page]) 
else 
    @filter = User.where(team_id: current_user.team_id).all 
    @users = @filter.paginate(page: params[:page]) 
end 
end 

答えて

2

あなたがUser.allレールを行うユーザーオブジェクトの配列に変換します。 User.all.classとお試しください。

User.where(true)を使用できます。それはすべてのユーザーレコードを処理して取得する必要があります。お使いのコントローラで

2

require 'will_paginate/array' 

この行を追加し、再度

を試してみてください
関連する問題