我有一个应用程序,其中包含调用。每个电话都可以取消。当在取消操作中取消一个调用时,我会呈现一个cancel_form,它给了用户一个取消原因,以便从中选择并利用更新操作来写入参数。Rails更新操作在我的某个字段中注入Null
它功能很好,但是每当我使用它它抹去我的transfer_date字段。参数显示正确设置的cancel_reason_id,然后它将transfer_date设置为NULL。我在代码中没有涉及transfer_date的内容,所以我很困惑。
这里则params的代码和输出:
Params:
Processing by CallsController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"SoiMjWjeMFXXeiA9N8nNwfIQDa7pbB0YS9XkmKY6AuQ=", "call"=>{"cancel_reason_id"=>"1"}, "button"=>"", "id"=>"183"}
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = 14 LIMIT 1
Call Load (0.3ms) SELECT "calls".* FROM "calls" WHERE "calls"."id" = $1 LIMIT 1 [["id", "183"]]
(0.1ms) BEGIN
(0.6ms) UPDATE "calls" SET "cancel_reason_id" = 1, "transfer_date" = NULL, "updated_at" = '2012-09-29 18:02:03.315975' WHERE "calls"."id" = 183
(1.9ms) COMMIT
CallsController取消行动:
def cancel
@call = Call.find(params[:id])
attrs = {
call_status: 'cancel',
incharge_id: @call.units.first.incharge_id,
attendant_id: @call.units.first.attendant_id
}
attrs.merge!({ incharge2_id: @call.units.second.incharge_id, attendant2_id: @call.units.second.attendant_id }) if @call.units.count == 2
if @call.update_attributes(attrs)
@call.units.each do |unit|
CallMailer.cancel_call(unit.incharge, @call).deliver
CallMailer.cancel_call(unit.attendant, @call).deliver
end
render "cancel_form"
else
redirect_to calls_url, :error => "Whoops."
end
end
Cancel_form视图
<%= form_for(@call) do |f| %>
<%= f.label :cancel_reason %>
<%= f.collection_select(:cancel_reason_id, CancelReason.all, :id, :reason, {}, {:class => 'select'}) %>
<%= f.button :submit %>
<% end %>
我试图创建一个独立的cancel_reason行动,并加入一个路由,但它也显然利用了更新操作,并将transfer_date设置为NULL 。
我确实需要这个功能才能工作,但现在我已经解决了我的故障排除技巧。
任何帮助将不胜感激。
我有params [:call] .parse_time_select! :我的更新操作中的transfer_date将我的日期/时间解析为一个字段。如果我在一个if transfer_date = nil语句中包装它,我可以使用正确的日期创建调用,并在cancel_reason视图中保留一个日期。但是由于我没有解析日期,所以偏斜了。除非逻辑在这里使用,否则什么是正确的? – nulltek
我只在params key transfer_date存在的时候才试图运行这个。这是我到目前为止:if(params.has_key?(:transfer_date)) params [:call] .parse_time_select! :transfer_date 结束但它仍然不解析时间。我的逻辑错了吗? – nulltek