0

これは発券システム用です。

チケットをクローズすると、 の列が表示されresolutionます。ユーザーは解決方法を入力します。つまり、「このチケットは xyz によって解決されました」と入力します。列は文字列ではなく、テキストフィールド型です。それで、あなたはそれを閉じて、ある種の解決策を入力します。ただし、チケットが削除されても、そのフィールドは「更新」されません。

概要: チケットが破棄されたときに、チケット モデルの解決状況の列を更新します。理由: 解決策をメール (Sendgrid 経由) と SMS (Twilio 経由) に渡す必要があります。現在、解決のデフォルト値を渡します (チケットが作成されたときの値は何でも)。

最初のチケット作成フォームでは、次resolutionのような隠しフィールドがあります。

<%= f.hidden_field :resolution, :value => "No Resolution Provided" %>

私が試したこと:

ticket.rbモデルでは:

before_destroy { self.update_attribute(:resolution, "a hardcoded value here") }

確かに機能しますが、フォームから読み取っているわけではなく、ハードコードされた値です。私が間違っている場合は修正してください。しかし、私がやろうとしていることはコントローラーで行う必要があります。正しいですか?

試してみましたbefore_actionが、あまり成功していません。このメソッドは、次のように使用すると機能しませんbefore_action

def update_resolution
    @ticket = Ticket.find(params[:id])
    @ticket_res = @ticket.resolution
    @ticket_res.update_attribute(params[:resolution])
end

上記はリダイレクトループを作成します。

これについて最善の方法は何ですか?あらゆるご意見をお待ちしております。

4

1 に答える 1

1

レコードを実際に動作させる必要のない他の機能のためにレコードを削除する直前に更新することは、私には良い方法とは思えません。

このワークフローは、私にとってより理にかなっています。

  1. 解決済みのチケットのコントローラーにフォームを送信し、解決済みのテキストを添えて
  2. 関係者に通知する解決策の詳細を含むバックグラウンド メール ジョブを作成する
  3. SMS detaios を使用して別のバックグラウンド twilio ジョブを作成し、関係者に通知します
  4. チケットを破棄します (二度と必要ないですか?)

バックグラウンド ジョブに関する Rails ガイドを読む必要があります: http://guides.rubyonrails.org/active_job_basics.html

最速のバックグラウンド ジョブ システムではありませんが、遅延ジョブが最も簡単に開始できます - https://github.com/collectiveidea/delayed_job

于 2016-01-21T19:30:47.260 に答える