在我的索引视图中,我希望能够根据城市,性别,照片和年龄过滤用户。目前我只按年龄过滤。我希望City和Gender的选项位于选择列表中,照片应该是一个复选框。
这是我的过滤器表单:
<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>
这是用户控制器:
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
个人资料。
我希望所有过滤选项都是可选的。我该怎么做?
答案 0 :(得分:1)
在轨道中,关系可以链接。
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
虽然,它很难看...... 如果您坚持编写过滤器,我建议您将逻辑封装到模型和使用范围。 或者你可以尝试一个名为ransack的好宝石。你会发现它已经为你完成了大部分工作,你只需要一点定制。