【发布时间】:2020-05-25 17:46:44
【问题描述】:
=> Rails 6.0.3
日期未从视图/表单传递到控制器。
什么有效
在视图中,日期字段预填充了来自 /models/case_search.rb - def initialize(params) 的默认值p>
-
从数据库中提取案例列表
SELECT "cases".* FROM "cases" WHERE (closed_date BETWEEN '2020-05-23' AND '2020-05-25')
什么失败了
-
当我更改表单字段中的日期时,URL 更改为:
http://localhost:3000/teams/5?Date+from=2020-05-10&Date+to=2020-05-15&commit=List
但病例列表保持不变:
SELECT "cases".* FROM "cases" WHERE (closed_date BETWEEN '2020-05-23' AND '2020-05-25')
不知何故,@search 变量到达控制器是空的,它总是默认为 /models/case_search.rb 中设置的值 - def initialize(params) - def parsed_date(date_string, default).
有人能找出问题所在吗?
我在/teams/show.html.erb有以下表格:
<%= form_tag team_path, method: "get" do %>
<%= text_field_tag 'Date from', @search.date_from %>
<%= text_field_tag 'Date to', @search.date_to %>
<%= submit_tag 'List', class: 'btn btn-dark' %>
<% end %>
控制器teams_controller.rb文件有:
def show
@team = Team.find(params[:id])
@team_owner = User.find(@team.owner)
@search = CaseSearch.new(params[:search])
@cases = @search.scope
end
我创建了一个新的模型文件/models/case_search.rb 来处理搜索:
class CaseSearch
attr_reader :date_from, :date_to
def initialize(params)
params ||= {}
@date_from = parsed_date(params[:date_from], 2.days.ago.to_date.to_s)
@date_to = parsed_date(params[:date_to], Date.today.to_s)
end
def scope
Case.where('closed_date BETWEEN ? AND ?', @date_from, @date_to)
end
private
def parsed_date(date_string, default)
Date.parse(date_string)
rescue ArgumentError, TypeError
default
end
end
【问题讨论】:
-
如果我将文件 /models/case_search.rb 更改为:
def initialize(params) params ||= {} @date_from = Date.parse(params[:date_from]) @date_to = Date.parse(params[:date_to]) end我收到以下错误:TeamsController 中的 TypeError#show no implicit conversion of nil into String @date_from = Date.parse(参数[:date_from])
标签: ruby-on-rails ruby