Мы разрабатываем собственный C.M.S. отслеживать наших клиентов, соответствующую информацию и отслеживать проблемы, с которыми сталкиваются эти клиенты. Для этого у нас есть пара столбцов в нашей таблице «tickets» - у нас есть «завершенное» логическое значение, «завершение-дата» и целое число завершено.
Мы пытаемся придумать пару U.I. методы, с помощью которых мы могли бы закрыть заявку - и на странице «Редактировать заявку» мы хотим иметь один флажок, который мы могли бы проверить и который обновил бы все три из этих столбцов:
- «завершено» от ложного до истинного
- "complete_at" от нуля до Time.now
- "complete_by" от null до current_user.id
Мы испробовали несколько разных подходов со всего Интернета, но мы не совсем уверены, как мы это сделаем.
РЕДАКТИРОВАТЬ: 26 июня 2018
Вот наше действие «обновить» в нашем tickets_controller.rb:
def update
respond_to do |format|
if @ticket.update(ticket_params)
format.html { redirect_to @ticket, notice: 'Ticket was successfully updated.' }
format.json { render :show, status: :ok, location: @ticket }
else
format.html { render :edit }
format.json { render json: @ticket.errors, status: :unprocessable_entity }
end
end
end
РЕДАКТИРОВАТЬ: 27 июня 2018
Вот решение, к которому я в конце концов пришел. В routes.rb
я изменил:
resources :tickets
до:
resources :tickets do
member do
patch :close_ticket
end
end
Затем в нашем контроллере Tickets я добавил следующую функцию:
def close_ticket
@ticket = Ticket.find(params[:id])
@ticket.update(:completed => true, :completed_at => Time.now, :completed_by => current_user.id)
redirect_to root_path, notice: "Ticket ##{@ticket.id} was successfully closed."
end
С этим я смог добавить следующую кнопку в любое представление:
<%= link_to "Close", close_ticket_ticket_path(ticket), method: :patch, class: "btn btn-sm btn-warning table-btn" %>
Кажется, что работает довольно хорошо и даже скрывает некоторые вещи из представления, так что опытный пользователь не может вводить неверные данные даты, если он хочет, что хорошо, но при чтении сильных параметров и метод tap
, я убежден, что решение @ mmichael , вероятно, является лучшим подходом, поэтому я отмечаю его как ответ!