You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails 5.1下拉菜单选择年月搜索失效问题求助

Rails 5.1 日期筛选功能失效问题排查

嗨,我帮你找到了问题所在!你看提交后的请求日志参数,和控制器里取参数的方式完全不匹配,这就是筛选没生效的核心原因~

先看你的请求日志里的参数结构:

Parameters: {"utf8"=>"✓", "start_date"=>{"year"=>"2016", "month"=>"1"}, "submit"=>"Search Job"}

年份和月份都被包裹在start_date这个哈希里,但你的控制器代码里直接尝试获取params[:year]和params[:month]——这两个值其实都是nil!所以if params[:year].present? or params[:month].present?这个条件根本不会触发,代码直接走到else分支,用ransack返回了所有jobs,自然看不到筛选效果。

下面给你两种可行的解决办法,任选其一即可:

方案一:修改控制器,从正确的参数位置取值

调整index方法里的参数获取逻辑,从params[:start_date]哈希里取出年份和月份:

def index
  # 确保start_date存在且year、month都不为空
  if params[:start_date].present? && params[:start_date][:year].present? && params[:start_date][:month].present?
    year = params[:start_date][:year]
    month_with_leading_zero = params[:start_date][:month].to_s.rjust(2, "0")
    start_date = "#{year}-#{month_with_leading_zero}-1"
    end_date = Time.now.strftime("%Y-%m-%d")
    @jobs = Job.where("datum_auftrag BETWEEN ? AND ?", start_date, end_date)
  else
    @search = Job.ransack(params[:q])
    @jobs = @search.result
  end
end

这里我还优化了条件判断,避免因year或month为空导致日期格式错误的问题。

方案二:修改视图,让参数直接以year/month形式传递

修改select_year和select_month的prefix参数,去掉这个前缀后,参数就不会嵌套在start_date里了:

<%= form_tag jobs_path, method: :get do %>
  <%= select_year(Date.today, 
    { prompt: "Year", start_year: DateTime.now.year, end_year: DateTime.now.year - 7, prefix: nil },
    { field_name: 'year', id: 'start-year' }
  ) %>
  <%= select_month(Date.today, 
    { prompt: "month", use_short_month: true, prefix: nil },
    { field_name: 'month', id: 'start-month' }
  ) %>
  <%= submit_tag("Search Job", id: "button", class: "Test", name: "submit") %>
<% end %>

这样提交后,参数就会变成{"year"=>"2016", "month"=>"1"},你的原控制器代码就能正常获取到参数,筛选逻辑也就生效了。

内容的提问来源于stack exchange,提问作者Trinity76

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:51:10