如何实现这个场景:
管理员使用复选框选择多个记录并单击按钮以批准选择,这将立即将所选项目的状态更改为批准。记录就像帖子。
这是我的代码:
配置/路由:
resources :time_cards do
collection do
get 'management'
put 'approve_multiple'
end
member do
get 'review'
get 'tracking'
patch 'approve_or_reject'
end
结束
html:
<%= form_tag({controller: 'time_cards', action: 'approve_multiple'}, method: 'put', id: 'approve_multiple_time_card_form') do %>
<% @time_cards.each do |time_card| %>
<tr>
<% if time_card.status.downcase == 'submitted' %>
<td><%= check_box_tag "time_cards_to_approve[]", time_card.id %></td>
<% else %>
<td> </td>
<% end %>
<td><%= time_card.id %></td>
<td><%= time_card.week_of.to_date.strftime('%B %-d, %Y') %></td>
<td><%= time_card.user.name %></td>
<td><%= time_card.status %></td>
<td><%= output_hours(time_card.time_card_entries) %></td>
<td>
<%= link_to review_time_card_path(time_card) do %>
<% if time_card.status.downcase == 'submitted' %>
<i class="material-icons">edit</i>
<% end %>
<% end %>
</td>
</tr>
<% end %>
<%= submit_tag "Approve Selected", class: 'btn btn-success' %>
<% end %>
Controller :
#PUT /time_cards/approve_multiple
def approve_multiple
authorize TimeCard
@time_cards.update_all({status: 'Approved'}, {id: params[:time_cards_to_approve]})
respond_to do |format|
if !@time_cards.errors
format.json { render json: { notice: 'Time cards approved successfully.'} }
format.html { redirect_to redirect_to management_time_cards_path, notice: 'Time cards approved successfully.'}
else
format.json { render json: { error: @time_cards.errors, alert: 'There was a problem approving the time card.'}}
format.html { redirect_to management_time_cards_path, alert: @time_cards.errors}
end
end
结束
???我不知道哪里错了?
最佳答案
将这些 id 发送到这样的操作
Post.where(id: params[:ids]).update_all(approved: true)
params[:ids]
是一个帖子 ID 数组
update_all
返回更新的记录数
哎呀,我理所当然地认为我们在谈论 rails,但从未提及。
关于ruby - 一次批准多个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45439861/