Rails取消确认原因

时间:2012-09-26 18:44:54

标签: ruby-on-rails ruby-on-rails-3 cancellation

我有一个包含调用的应用程序。我希望能够取消呼叫并提供取消呼叫的原因。到目前为止,我已经在控制器中执行了取消操作,但是我想弄清楚如何扩展它,所以在将“取消”发布到call_status字段之前,它还会填充cancel_reason字段基于下拉。

这是我到目前为止所拥有的:

  

查看代码: 取消按钮

<%= link_to 'Cancel', 
    cancel_call_path(call), 
    confirm: 'Are you sure you want to cancel the call?', 
    :method => :post, 
    :class => 'btn btn-danger btn-mini' %>


  

控制器代码:取消操作

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
         redirect_to calls_url, :notice => "Call was successfully cancelled"
        else 
          redirect_to calls_url, :error => "Whoops."
        end
      end

我要么显示确认弹出窗口,要么取消原因,要么取消操作绑定到包含原因的小表单的其他视图。

1 个答案:

答案 0 :(得分:0)

默认情况下,confirm中的link_to属性使用JavaScript window.confirm,这是一个简单的是/否,返回true / false。

如果您想在同一页面上完成所有操作,则需要使用JavaScript和Ajax来完成此任务。在Cancel链接上添加事件处理程序的行,它将显示带下拉列表的模式。然后,此模式的结果将Ajax发送到Rails应用程序的POST请求。 There are a lot of jQuery Plugins您可以用它来帮助您在Rails中完成此任务。

第二个选项是您描述的在控制器中使用单独操作的选项。在UX方面,我认为第一个选择是更好的路线,并不像听起来那么可怕。