【发布时间】:2016-08-26 23:00:05
【问题描述】:
我有一个 Rails 3.2.16 旧版应用程序,我在其中记录每次通话的通话信息和时间 en_route_time on_scene_time 等都是 datetime 字段。
在我的Call 显示视图中,我有一个编辑时间路径,它通过获取请求重定向到edit_times 视图。这允许您在出现错误时编辑时间。
calls_controller.rb 中的edit_times
def edit_times
@call = Call.find(params[:id])
end
edit_times.html.erb
<%= form_for(@call) do |f| %>
<%= f.label :En_Route_Time %>
<%= f.date_select :en_route_time %>
<%= f.time_select :en_route_time,
:combined => true,
:default => Time.zone.now,
:include_blank => true,
:minute_interval => 1,
:time_separator => "",
:start_hour => 00,
:end_hour => 23 %>
<%= f.label :On_Scene_Time %>
<%= f.date_select :on_scene_time %>
<%= f.time_select :on_scene_time,
:combined => true,
:default => Time.zone.now,
:include_blank => true,
:minute_interval => 1,
:time_separator => "",
:start_hour => 00,
:end_hour => 23 %>
<%= f.label :To_Hospital_Time %>
<%= f.date_select :to_hospital_time %>
<%= f.time_select :to_hospital_time,
:combined => true,
:default => Time.zone.now,
:include_blank => true,
:minute_interval => 1,
:time_separator => "",
:start_hour => 00,
:end_hour => 23 %>
<%= f.label :At_Hospital_Time %>
<%= f.date_select :at_hospital_time %>
<%= f.time_select :at_hospital_time,
:combined => true,
:default => Time.zone.now,
:include_blank => true,
:minute_interval => 1,
:time_separator => "",
:start_hour => 00,
:end_hour => 23 %>
<%= f.label :In_Service_Time %>
<%= f.date_select :in_service_time %>
<%= f.time_select :in_service_time,
:combined => true,
:default => Time.zone.now,
:include_blank => true,
:minute_interval => 1,
:time_separator => "",
:start_hour => 00,
:end_hour => 23 %>
<%= f.button :Submit %>
<% end %>
这很好用,但是在编辑时间时,如果未填充时间,它将使用默认时间 update_attributes 选择空白0:00。
于是我在calls_controller' to allow blank times if the5iparams is blank on the update action and use abefore_filter`中写了如下私有方法来触发它。
calls_controller.rb
before_filter :filter_blank_call_times, only: [:update]
def filter_blank_call_times
if params[:call]['en_route_time(5i)'].blank?
params[:call]['en_route_time(1i)'] = ""
params[:call]['en_route_time(2i)'] = ""
params[:call]['en_route_time(3i)'] = ""
params[:call]['en_route_time(4i)'] = ""
params[:call]['en_route_time(5i)'] = ""
end
if params[:call]['on_scene_time(5i)'].blank?
params[:call]['on_scene_time(1i)'] = ""
params[:call]['on_scene_time(2i)'] = ""
params[:call]['on_scene_time(3i)'] = ""
params[:call]['on_scene_time(4i)'] = ""
params[:call]['on_scene_time(5i)'] = ""
end
if params[:call]['to_hospital_time(5i)'].blank?
params[:call]['to_hospital_time(1i)'] = ""
params[:call]['to_hospital_time(2i)'] = ""
params[:call]['to_hospital_time(3i)'] = ""
params[:call]['to_hospital_time(4i)'] = ""
params[:call]['to_hospital_time(5i)'] = ""
end
if params[:call]['at_hospital_time(5i)'].blank?
params[:call]['at_hospital_time(1i)'] = ""
params[:call]['at_hospital_time(2i)'] = ""
params[:call]['at_hospital_time(3i)'] = ""
params[:call]['at_hospital_time(4i)'] = ""
params[:call]['at_hospital_time(5i)'] = ""
end
if params[:call]['in_service_time(5i)'].blank?
params[:call]['in_service_time(1i)'] = ""
params[:call]['in_service_time(2i)'] = ""
params[:call]['in_service_time(3i)'] = ""
params[:call]['in_service_time(4i)'] = ""
params[:call]['in_service_time(5i)'] = ""
end
end
routes.rb 除外
resources :calls do
member do
post 'close'
post 'cancel'
post 'note'
get 'opencall'
get 'new_return'
get 'duplicate_call'
get 'edit_times'
put 'update_billing'
post 'dispatch_call'
put 'en_route'
put 'on_scene'
put 'to_hospital'
put 'at_hospital'
put 'in_service'
end
collection do
get "scheduled"
get "call_search"
end
end
这在编辑时间时可以正常工作,并且如果 5i datetime 字段为空白,则允许输入空白时间。
我遇到的问题是,当通过正常的编辑/更新约定编辑/更新呼叫时,每当我编辑呼叫时,它就会消除那里的任何时间。
我正在寻找一种方法来在calls_controller.rb 的update 方法中编写条件,其中只有在5i 中的任何一个键为空时才会调用filter_blank_call_times。它现在的工作方式是,当您编辑时间时,它会在calls_controller 上调用update 操作并将所有时间设置为零。我需要找到一种方法,只在编辑时间时执行 filter_blank_call_times 方法,而不是在编辑/更新呼叫时执行,以防止呼叫时间被清除。
如果有更好的方法来做到这一点,例如为edit_times 构建另一个控制器并将该资源嵌套在调用下或以某种方式执行发布请求而不是在update 上使用update 操作操作@ I'很想听听。
总而言之,编辑时间没有问题,但是在更新操作中调用它会消除时间调用,我需要想办法解决这个问题。
如果我的问题不清楚或者您需要更多信息/代码,请告诉我。
这是在 calls_controller 中调用 update 操作时传递的参数的一个例外
Started PUT "/calls/125" for 127.0.0.1 at 2014-10-08 06:59:05 -0500
Processing by CallsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"uH+XDJpZQDH4PNAuOOi7dfLVolfRzziMKWc/rSR6UMg=", "call"=>{"caller_name"=>"James Jelinek", "caller_phone"=>"281-444-2222", "caller_address"=>"", "patient_name"=>"Doe, John", "billing_address"=>"", "patient_dob"=>"2001-10-17", "patient_age"=>"12", "patient_sex_id"=>"1", "insurance_id"=>"4", "nature_id"=>"2", "region_id"=>"2", "transfer_from_id"=>"3", "transfer_from_other"=>"", "facility_from_location"=>"", "transfer_to_id"=>"", "transfer_to_other"=>"123 w 8th st Houston, TX 77088", "facility_to_location"=>"ER Room 2", "service_level_id"=>"1", "special_equipment_ids"=>["", "2"], "transfer_date(2i)"=>"10", "transfer_date(3i)"=>"2", "transfer_date(1i)"=>"2014", "transfer_date(5i)"=>"00:00:00", "wait_return"=>"yes", "parent_call_id"=>"124", "traffic_type"=>"Non-Emergency", "unit_ids"=>["", "1"], "call_status"=>"open"}, "button"=>"", "id"=>"125"}
【问题讨论】:
-
为什么 5(i) 键不能有 00 代替?
-
@Surya 抱歉,我不确定我是否理解您的要求。如果我编辑时间并且尚未填充时间,我希望它是一个 nil 值而不是默认为 0:00 的 datetime 对象
-
我也不明白你想说什么。可以将
params的日志数据在发布到create/update方法的时候发布吗? -
@Surya 很抱歉造成误会,当
calls_controller调用update时,我用参数哈希的示例日志更新了我的问题 -
见:
"transfer_date(5i)"=>"00:00:00"在params它有 00:00:00 所以我的问题是:为什么你需要寻找.blank?你可以简单地让 00,对吧?
标签: ruby-on-rails-3 datetime activerecord rails-activerecord