2016-09-15 3 views
0

変更を反映するために属性を更新した後にメッセージを投稿またはレンダリングするにはどうすればよいですか? (私はこの仕事に関してオンラインで何かを見つけることができませんでした)Rails 4:属性を更新した後でメッセージを投稿する

例:ユーザーがチケットのステータスを更新すると、「チケットが閉じられました」というコメントセクションにメッセージが表示されます。 (フラッシュメッセージはありませんが、永久的です)。

tickets_controller.rb

def open 
    @ticket = Ticket.find(params[:ticket_id]) 
    @ticket.update_attributes(:ticket_status, "closed") 
    redirect_to ticket_path 
end 
+0

こんにちは。あなたはレールが「フラッシュ」と聞いたことがありますか?それがどのようにレールで動作し、それがあなたを助けるかについてgoogleを持ってください:) –

+1

@TarynEast:彼は彼がフラッシュを望んでいないと書いています –

+0

@ChakreshwarSharmaは、そのビットを見逃しました。ありがとう:) –

答えて

0

を解放するメッセージを表示した後session[:close_message] = nilのようなセッションをクリアすることを確認してくださいあなたには、メッセージを格納する必要がありますデータベースを永続化したい場合は、誰かがそれを閉じて、チケットを手にした(チケットモデル)。バックエンドの属性はチケットモデルの属性ステータスを更新します。

def update 
    tkt = Ticket.where(id: 1) 
    tkt.update_attributes(status: 1) 
end 

これはAJAX呼び出しの場合は、「チケットが閉じて」のようなメッセージで応答データを送信し、AJAX呼び出しの成功コールバックでhtmlページに応じてそれを表示することができます。サーバーコールの場合は、ページを更新し、Ticketモデルのstatus属性を使用してメッセージを作成します。

あなたが作成するために、一般的なものではなく、すべての時間は、いくつかのより多くのカスタマイズが必要とされ、より良い場合メッセージに

{0 => "Ticket Open", 1 => "Ticket closed", 2 => "Ticket in progress" } 

のようないくつか列挙型を使用して、関連するモデル内の属性や不要とメッセージ全体を保存することができますenumを持つこと。

+0

これは私が必要なもののための良い解決策に思われるありがとう。 – user4935658

0

あなたはこのpursposeのセッションを使用することができます。その後

def open 
    @ticket = Ticket.find(params[:ticket_id]) 
    @ticket.update_attributes(:ticket_status, "closed") 
    session[:close_message] = "Ticket has been closed" 
    redirect_to ticket_path 
end 

<%= session[:close_message] %> 

のようなビューでdiaplayが、メモリに

+0

あなたの迅速な対応に感謝します。私は疑問に思いました...セッションでそれを設定しない方法はありますか?私はそれをopen - > closeの複数の変更によって変更されない永続的なメッセージとして保持したいと思います。 – user4935658

+0

あなたはもう一つのことをすることができます、redirect_to ticket_path、メッセージのようなパラメタでメッセージを渡してください: 'チケットは閉じました'そして@message = params [:message]のようなチケットパスコントローラを読んでから、 –

+0

しかし、これはパラメータでメッセージを渡すのは良いことではないので、これらのタイプのメッセージにフラッシュメッセージを使用することをお勧めします。 –

関連する問題