【问题标题】:How to filter results with Ransack如何使用 Ransack 过滤结果
【发布时间】:2013-04-06 09:13:53
【问题描述】:

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

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

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

@users 是一个 ActiveRecord::Relation 对象。 @users 本质上是捕获与current_user 属于同一城市的所有用户。在我看来,我能够遍历@users 并显示与current_user 属于同一城市的所有用户。这一切都很好。现在我希望能够根据用户提供的年龄范围过滤这些结果。根据 Railcasts,我可以这样做:

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

但是我不再有相同的城市范围了。我想要的是默认显示与current_user 属于同一城市的所有用户,然后按年龄过滤这些结果。

【问题讨论】:

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


    【解决方案1】:

    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])
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-23
    • 2018-03-24
    • 1970-01-01
    相关资源
    最近更新 更多