Ruby on rails 通过ID筛选的索引页有许多子对象
我有一个工作索引页。城市和职位都有很多:通过与工作的关系 在Jobs Index页面上,我有一个小的搜索表单,我想用它根据用户选择的城市和职位组合过滤结果 到目前为止,情况就是这样 作业索引 作业索引控制器 我希望@jobs被过滤,购买@city或@position 如果@city不存在,则只按@position过滤,反之亦然。 如果两者都不存在,那么它只是对所有作业进行分页。然而,我想到的所有代码都很长,并且充满了if语句,所以我认为我走错了路Ruby on rails 通过ID筛选的索引页有许多子对象,ruby-on-rails,slim-lang,Ruby On Rails,Slim Lang,我有一个工作索引页。城市和职位都有很多:通过与工作的关系 在Jobs Index页面上,我有一个小的搜索表单,我想用它根据用户选择的城市和职位组合过滤结果 到目前为止,情况就是这样 作业索引 作业索引控制器 我希望@jobs被过滤,购买@city或@position 如果@city不存在,则只按@position过滤,反之亦然。 如果两者都不存在,那么它只是对所有作业进行分页。然而,我想到的所有代码都很长,并且充满了if语句,所以我认为我走错了路 我将如何通过@city和@position筛选@
我将如何通过@city和@position筛选@jobs 您可以利用这样一个事实,即在执行查询时,多个where调用中的条件被连接:
@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)
嘿,机械鱼,谢谢你的帮助。实现后,我得到错误->SQLite3::SQLException:没有这样的列:jobs.city\u id:从jobs.city\u id=1 LIMIT 5 OFFSET 0的jobs中选择jobs.*。我会用更多的信息更新我的问题,你认为发生了什么?啊,我想我知道为什么。与工作和城市的关系实际上是一种有很多贯穿关系的关系。因此,乔布斯在许多城市也有影响力。所以乔布斯实际上没有城市id。它有乔布斯。城市,其中一个id可以是这个id。你对我们如何处理这个问题有什么想法吗?
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 = 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)