2

Web サイトの検索機能に Ransack を実装しようとしています。Ransack で Railscasts を見てみると、実装方法がよくわかりました。しかし、私は理解できないように見える問題に遭遇しています。

私の Users コントローラーの Index アクションには、次のコードがあります。

def index
   @users = User.same_city_as(current_user)
end

@usersActiveRecord::Relationオブジェクトです。@usersは基本的に、 と同じ都市に属するすべてのユーザーをキャプチャしますcurrent_user。私の見解では@users、 と同じ都市に属するすべてのユーザーを反復して表示できますcurrent_user。これはすべて良いです。ここで、ユーザーから提供された年齢の範囲に基づいてこれらの結果をフィルタリングできるようにしたいと考えています。Railcastsによると、私はこれを行うことができます:

def index
  @search = User.search(params[:q])
  @Users = @search.result
end

しかし、私はもう同じ都市のスコープを持っていません。私が望むのは、current_userデフォルトで同じ都市に属するすべてのユーザーを表示し、それらの結果を年齢でフィルタリングすることです。

4

1 に答える 1

2

Ransack はスコープで動作するため、独自のスコープを簡単にチェーンできます。

User.same_city_asスコープ (インスタンス) を返すと仮定すると、次のActiveRecord::Relationように簡単に実行できます。

@search = User.same_city_as(current_user).search(params[:q])
@users = @search.result

@search.resultスコープも返すので、ページネーションなど、さらに変更を加えることができます。

カミナリを使用すると、次のようになります。

@search = User.same_city_as(current_user).search(params[:q])
@users = @search.result.page(params[:page])
于 2013-04-06T09:19:25.613 に答える