首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何按城市、性别、照片和年龄添加筛选以查找用户?

如何按城市、性别、照片和年龄添加筛选以查找用户?
EN

Stack Overflow用户
提问于 2013-08-14 09:01:58
回答 1查看 265关注 0票数 0

在我的索引视图中,我希望能够根据城市、性别、照片和年龄过滤用户。目前我只按年龄进行过滤。我希望城市和性别的选项在一个选择列表和照片应该是一个复选框。

这是我的过滤器表格:

代码语言:javascript
代码运行次数:0
运行
复制
<form action="/users" method="get">
Ages from: <input id="min_age" name="[min_age]" type="text" class="gteq" />
to <input id="max_age" name="[max_age]" type="text" class="gteq" />
<input class="button" type="submit" value="Filter" />
</form>

以下是用户控制器:

代码语言:javascript
代码运行次数:0
运行
复制
def index
@users = User.all
if params[:min_age] && params[:max_age]
@users = @users.where("profiles.birthday >= ? AND profiles.birthday <= ?",
 params[:max_age].to_i.years.ago + 1.day, params[:min_age].to_i.years.ago)
end
end

城市、性别和照片都是belongs_to用户配置文件模型的属性。每个用户has_one配置文件。

我希望所有过滤选项都是可选的。我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-14 09:42:28

在rails中,关系可以被链接起来。

代码语言:javascript
代码运行次数:0
运行
复制
def index
  @users = User.all
  if params[:min_age] && params[:max_age]
    @users = @users.where("profiles.birthday >= ? AND profiles.birthday <= ?",
    params[:max_age].to_i.years.ago + 1.day, params[:min_age].to_i.years.ago)
  end

  if params[:city]
    @users = @users.where("profiles.city = ?", params[:city])
  end

  if params[:gender]
    @users = @users.where("profiles.gender = ?", params[:gender])
  end

  ......
end

虽然,它很丑..。如果您坚持编写过滤器,我建议您封装逻辑来建模和使用范围。或者您可以尝试一个名为洗劫的好宝石。您会发现它已经为您完成了大部分工作,您只是需要一点定制或不。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18227363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档