如何使用Ransack过滤结果

时间:2013-04-06 09:13:53

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

我正在尝试在我的网站上实现Ransack搜索功能。我尝试在Ransack上观看Railscasts,并对如何实现它进行了很好的了解。但是我遇到了一个我似乎无法弄清楚的问题。

在我的用户控制器的索引操作中,我有以下代码:

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,然后按年龄过滤这些结果。

1 个答案:

答案 0 :(得分:2)

Ransack适用于范围,因此您可以轻松链接自己的范围。

假设User.same_city_as返回范围(ActiveRecord::Relation实例),您只需执行此操作:

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

@search.result也会返回一个范围,因此您可以对其进行进一步修改,例如分页。

使用 Kaminari ,这可能如下所示:

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