【问题标题】:Rails: search for years and months from drop down listsRails:从下拉列表中搜索年份和月份
【发布时间】:2018-01-17 21:40:51
【问题描述】:

我使用 Rails 5.1,并尝试使用两个下拉选择列表 -1 进行搜索。年,2. 个月 - 和一个提交按钮。

在我看来:

<%= 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: 'select'},{:field_name => 'year', :id => 'start-year'}) %>
  <%= select_month(Date.today, {:prompt => "month",use_short_month: true, prefix: 'select'},{:field_name => 'month', :id => 'start-month'}) %>
  <%= submit_tag("Search Job", :id=>"button", :class=>"Test", :name=>"submit") %>
<%end%>

在我的 jobs_controller.rb 中:

  # GET /jobs.json
  def index
    if params[:year].present? or params[:month].present?
       month_with_leading_zero = params[:month].to_s.rjust(2, "0")
       start_date = "#{params[: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

在我的数据库中,日期以格式保存:yyyy-mm-dd 例如。 2011-01-20

单击提交按钮会忽略过滤,而是打印所有作业:

开始 GET "/jobs?utf8=%E2%9C%93&start_date%5Byear%5D=2016&start_date%5Bmonth%5D=1&submit=搜索+工作" 为 ::1 在 2018-01-17 14:01:54 +0100 处理 JobsController#index 作为 HTML 参数:{"utf8"=>"✓", "start_date"=>{"year"=>"2016", "month"=>"1"}, "submit"=>"Search Job"} 在布局/应用程序中渲染作业/index.html.erb 作业/_job_links.html.erb (38.5ms) 作业负载 (5.5ms) SELECT jobs.* FROM jobs (1.3ms) 选择计数() FROM manuscripts WHERE manuscripts.job_id = 20 (2.2ms) 选择计数() FROM manuscripts 哪里 manuscripts.job_id = 21

我错过了什么?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    1 在您的索引页面上制作一个搜索表单

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

    注意:- 将 your_index_action_path 替换为索引操作的路径,您可以通过运行 rake routes 在控制台上获取路径

    2-在您的索引操作中单击控制器侧的提交按钮,您将获得以下参数

    {"utf8"=>"✓", "select"=>{"year"=>"2018", "month"=>"1"}, "submit"=>"Search Job", "controller"=>"jobs", "action"=>"index"} permitted: false>
    

    所以从这里你只需要params[:select][:year]params[:select][:month]

    def index
      if params[:select][:year].present? || params[:select][:month].present?
        start_date = (params[:select][:year]+"-" +params[:select][:month]+"-"+Date.today.day.to_s).to_datetime.beginning_of_day
        end_date = Date.today.end_of_day
        @jobs = Job.where("datum_auftrag BETWEEN ? AND ?",start_date, end_date)
      else
        @jobs = Job.all
      end
    end
    

    注意:-这里需要根据选择的值来自定义日期,我使用beginning_of_dayend_of_day的方法来获得更清晰的搜索结果。

    之前我只给了你一个示例代码,你应该修改它,在这里我再次给你解决方案,请不要只是复制和粘贴使用调试器并在控制器端撬来获取选定的日期和年份,但是我实际上已经完成了这个答案。

    【讨论】:

    • 加巴尔,非常感谢!如果 params[:select][:year].present? ...
    • @Trinity76 你可以在索引操作中放置一个调试器或窥探并检查来自哪些参数吗?
    • NoMethodError (未定义方法 []' for nil:NilClass): app/controllers/jobs_controller.rb:15:in index' 开始获取 "/jobs?utf8=%E2%9C%93&start_date%5Byear%5D=2018&start_date%5Bmonth%5D=1&submit=Search+Job" 用于: :1 at 2018-01-17 14:29:49 +0100 由 JobsController#index 处理为 HTML 参数:{"utf8"=>"✓", "start_date"=>{"year"=>"2018", "月"=>"1"}, "提交"=>"搜索工作"} 参数[]: {"utf8"=>"✓", "start_date"=>{"年"=>"2018", "月"=>"1"}, "submit"=>"Search Job", "controller"=>"jobs", "action"=>"index"} Completed 500 Internal Server Error in 1ms (ActiveRecord: 0.0ms)
    • 这就是我将 logger.debug "params[]: #{params}" 放在 if params[:select][:year].present 之前得到的结果? ...声明
    • @Trinity76 是的,我看到您的参数以正确的格式相应发送,正如我在上面的答案中解释的那样。但是您还没有替换索引操作代码,为什么您仍然会收到相同的错误。请阅读上面的答案。像我一样做。这样您就不会收到这些错误。
    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多