0

通話を含むアプリがあります。各通話はキャンセルできます。キャンセル アクションで呼び出しがキャンセルされると、cancel_form をレンダリングします。これにより、キャンセルの理由をユーザーに提示し、更新アクションを利用してパラメーターを書き込みます。

正常に機能しますが、これを使用するたびに 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 に設定します。

この機能を機能させるには本当に必要ですが、今のところトラブルシューティング スキルは限界です。

どんな助けでも大歓迎です。

4

2 に答える 2

0

Call モデルの attr_accessible で transfer_date を見逃しているのではないでしょうか?

于 2012-09-29T19:17:48.333 に答える
0
 if params[:call].has_key? 'transfer_date(1i)'
      params[:call].parse_time_select! :transfer_date
    end

この条件ステートメントを含めることで、params キー transfer_date(1i) を含むリクエストに対してのみ parse_time 行を実行できました。これで私の問題は解決しました。

于 2012-09-30T17:01:13.407 に答える