2016-09-15 2 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

Привет и добро пожаловать в переполнение стека. Вы слышали о рельсах 'flash'? у вас есть Google, как это работает в рельсах, и это поможет вам :) –

+1

@TarynEast: он написал, что он не хочет флэш-памяти –

+0

@ChakreshwarSharma, пропустил этот бит. Спасибо :) –

ответ

0

Вы должны сохранить сообщение в если вы хотите, чтобы он сохранялся. Скажите, например: «Есть билет» (билетная модель), и кто-то его закрывает. Атрибут на бэкэнд обновит статус атрибута для модели билета.

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

Если это Ajax вызов, вы можете отправить данные ответа с сообщением вроде «Ticket закрыт» и отобразить его соответствующим образом на HTML-страницу в успех обратного вызова Ajax вызова. Если это вызов сервера, обновите страницу и используйте атрибут status из модели Ticket, чтобы создать сообщение.

Вы можете использовать некоторые перечислений как

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

В случае сообщения не являются общими и каждый раз, когда требуется более некоторые настройки, лучше создать и сохранить все сообщение в качестве атрибута в соответствующей модели, и нет необходимости иметь перечисления.

+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 

После этого diaplay его в представлении, как

<%= session[:close_message] %> 

, но убедитесь, чтобы очистить сеанс как session[:close_message] = nil после вывода на экран сообщения для освобождения памяти

+0

Спасибо за ваш быстрый ответ. Мне было интересно ... Есть ли способ не настроить его в сеансе? Я хотел бы сохранить его как постоянное сообщение, которое не изменено несколькими изменениями в open -> close. – user4935658

+0

вы можете сделать еще одну вещь, передать сообщение в параметриторе, например redirect_to ticket_path, сообщение: 'Ticket is closed' & read it the controller path controller, например @message = params [: message], и ​​затем отобразить его в виде –

+0

но это нехорошо передать сообщение в параметре, я бы предложил использовать флэш-сообщения для этих типов сообщений. –

Смежные вопросы