Обновить поле модели кнопкой Rails - PullRequest
0 голосов
/ 29 апреля 2018

В моем проекте Rails 5 есть система обмена сообщениями, в которой модель Message имеет поле isread, чтобы указать, прочитал ли получатель сообщение или нет.

Я использую модал начальной загрузки для просмотра сообщения и хотел бы, чтобы поле isread сообщения изменилось на true, когда модал закрыт.

Может кто-нибудь объяснить, как это сделать с помощью button_tag или сделать метод вызова тега кнопки в контроллере, чтобы сделать это?

Что-то вроде:

message.isread = true
message.save!

для выполнения при нажатии кнопки «Закрыть» с моей точки зрения:

<div id="modal1<%= index %>" class="modal fade" role="dialog">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title"><%= message.subject %></h4>
      </div>
      <div class="modal-body">
        <p><%= message.content %></p>
      </div>
      <div class="modal-footer">
        <%= button_tag "Close", :class => "btn btn-default", "data-dismiss" => "modal" %>
      </div>
    </div>
  </div>
</div>

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Вы можете определить новое действие в вашем контроллере, которое обновит атрибут isread до true и использовать button_to helper

#routes
resources :messages do
  post :is_read, on: :member
end  

#messages controller
def is_read
  @message = Message.find(params[:id])
  @message.update(isread: true)
  redirect_to ...
end

#view
<%= button_to "Close", is_read_message_path %>
0 голосов
/ 29 апреля 2018

Если вы хотите, чтобы нажатие кнопки вызывало метод в вашем контроллере, вам нужно сначала зафиксировать действие нажатия кнопки в javascript

$(".btn-default").click(function(){

});

Затем вы хотите выполнить Ajax-вызов метода контроллера

$.ajax({
    url: "/message/update_is_read",
    type: "POST",
    data: {is_read: isRead},
    success: function(resp) {
        console.log(resp);  
    },
    error: function(resp) {
        console.log(resp);
    },
});

тогда в вашем контроллере лови его с

def update_is_read
     is_read = params[:is_read]

end

Убедитесь, что вы добавили путь к своим маршрутам

  post '/messages/update_is_read', to: 'messages#update_is_read', as: '/messages/update_is_read'

Вы можете изменить код контроллера для сохранения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...