我有一个乔布斯的索引页面。城市和职位都有着与工作的关系。
在工作索引页面上,我有一个小的搜索表单,我想用它来过滤用户选择的城市和职位组合的结果。
这是迄今为止的样子
工作#索引
- provide(:title, 'All Jobs')
.thinstripe_career
.darken
.container
.row
.span10.offset1
.jobs_header
.row
.span7
h2 All #{@city.name if @city} #{@position.name if @position} Jobs
.span3
== link_to "Sign up for Job Alerts!", "#", :class => "button"
- if current_user && current_user.admin?
== render 'shared/dashboard_header'
.container
.row
.span10.offset1
.job_search
== form_tag jobs_path, :method => 'get', :id => "jobs_filter" do
h2 I'd like jobs in
.filter_sect
== select_tag :city_id, options_from_collection_for_select(@cities, "id", "name"), :class => "basic"
.filter_sect
== select_tag :position_id, options_from_collection_for_select(@positions, "id", "name"), :class => "basic"
.filter_sect.filter_search
== submit_tag "Search", :class => "button search_button button_black"
ul.jobs
== render @jobs
== will_paginate
工作#索引控制器
def index
@cities = City.all
@positions = Position.all
@city = City.find(params[:city_id]) if params[:city_id]
@position = Position.find(params[:position_id]) if params[:position_id]
@jobs = Job.paginate(page: params[:page])
end
我想@jobs过滤购买@city或@position。
条件是如果@city不存在,它只按@position过滤,反之亦然。 如果两者都不存在,那么它只是对所有作业进行分页。但是,我想到的所有代码都很长,并且使用if语句,因此我认为我走错了路。
我如何通过@city和@position过滤@jobs?
答案 0 :(得分:1)
执行查询时,您可以利用AND
加入调用的多个条件:
@jobs = Job
@jobs = @jobs.includes(:cities).where(cities: { id: @city }) if @city
@jobs = @jobs.where(position_id: @position) if @position
@jobs = @jobs.paginate(page: params[:page], per_page: 5)