Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails取消确认原因_Ruby On Rails_Ruby On Rails 3_Cancellation - Fatal编程技术网

Ruby on rails Rails取消确认原因

Ruby on rails Rails取消确认原因,ruby-on-rails,ruby-on-rails-3,cancellation,Ruby On Rails,Ruby On Rails 3,Cancellation,我有一个包含调用的应用程序。我希望能够取消通话,并提供取消通话的原因。到目前为止,我的取消操作在控制器中工作,但我正在尝试如何扩展它,以便在它将“取消”发布到call\u status字段之前,它还将根据下拉列表填充cancel\u reason字段 以下是我目前掌握的情况: 查看代码:取消按钮 我希望显示带有取消原因的确认弹出窗口,或者使用包含原因的小表单将取消操作绑定到不同的视图。默认情况下,链接到的中的确认属性使用JavaScript窗口。确认是一个简单的是/否,返回真/假 如果你想在同一

我有一个包含调用的应用程序。我希望能够取消通话,并提供取消通话的原因。到目前为止,我的取消操作在控制器中工作,但我正在尝试如何扩展它,以便在它将“取消”发布到
call\u status
字段之前,它还将根据下拉列表填充
cancel\u reason
字段

以下是我目前掌握的情况:

查看代码:取消按钮


我希望显示带有取消原因的确认弹出窗口,或者使用包含原因的小表单将取消操作绑定到不同的视图。

默认情况下,
链接到的
中的
确认
属性使用JavaScript
窗口。确认
是一个简单的是/否,返回真/假

如果你想在同一个页面上完成这一切,你需要使用JavaScript和Ajax来完成。类似于在Cancel链接上添加事件处理程序,该链接将显示带有下拉列表的模式。然后,此模式的结果将向Rails应用程序发出POST请求。您可以使用它来帮助您在Rails中实现这一点


第二个选项是您描述的,它将在控制器中使用单独的操作。就用户体验而言,我认为第一种选择是一种更好的方式,而且没有听起来那么可怕。

我喜欢使用JS/Ajax模式来解决这个问题。我只是不知道从哪里开始。我对JS/Ajax非常陌生,对rails也很熟悉。添加一个新动作似乎有点让事情变得一团糟,我也希望从用户体验的角度来看待事情。
<%= 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