【发布时间】:2018-06-26 18:17:35
【问题描述】:
我们正在开发一个内部 C.M.S.跟踪我们的客户、相关信息并跟踪这些客户遇到的问题。为此,我们的“tickets”表中有几列——我们有一个“completed”布尔值、一个“completed_at”日期时间和一个“completed_by”整数。
我们正在尝试提出几个 U.I.我们可以关闭工单的方法 - 在“编辑工单”页面中,我们希望有一个复选框,我们可以检查它来更新所有这三个列:
- “完成”从假到真
- "completed_at" 从 null 到 Time.now
- "completed_by" 从 null 到 current_user.id
我们已经从整个网络尝试了几种不同的方法,但我们并不完全确定我们会如何做到这一点。
编辑: 2018 年 6 月 26 日
这是我们在 ticket_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
编辑: 2018 年 6 月 27 日
这是我最终得出的解决方案。在routes.rb,我改了:
resources :tickets
到:
resources :tickets do
member do
patch :close_ticket
end
end
然后,在我们的门票控制器中,我添加了以下函数:
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" %>
似乎工作得很好,甚至可以从视图中隐藏某些内容,这样精明的用户就无法输入错误的日期数据,如果他们愿意,这很好 - 但是在阅读 strong parameters 和 tap方法,我确信@mmichael的解决方案可能是更好的方法,所以我将其标记为答案!
【问题讨论】:
标签: ruby-on-rails database forms checkbox ruby-on-rails-5.2