0

通話を含むアプリケーションがあります。通話をキャンセルし、通話キャンセルの理由を提供できるようにしたいです。これまでのところ、コントローラーでキャンセルアクションが機能していますが、フィールドに「キャンセル」を投稿する前に、ドロップダウンに基づいてフィールドに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

キャンセルの理由とともに表示される確認ポップアップ、または理由を含む小さなフォームで別のビューに関連付けられたキャンセル アクションのいずれかが必要です。

4

1 に答える 1

0

デフォルトでは、confirm属性 inはtrue/false を返す単純な yes/no であるlink_toJavaScript を使用します。window.confirm

同じページですべてを実行したい場合は、JavaScript と Ajax を使用する必要があります。ドロップダウン付きのモーダルを表示するキャンセルリンクにイベントハンドラーを追加する行に沿ったもの。このモーダルの結果は、Rails アプリへの POST リクエストを Ajax します。Rails でこれを実現するために使用できるjQuery プラグインはたくさんあります。

2番目のオプションは、コントローラーで別のアクションを使用することであると説明したものです。UX に関しては、最初のオプションの方が適切なルートであり、思ったほど怖くはないと思います。

于 2012-09-26T19:02:51.490 に答える