[英]Rails how to render two different modals for destroy action
當銀行經理必須刪除沒有客戶bank_employee.users = nil
bank_employee
時,我想添加確認模式。 如果bank_employee
有客戶,我想呈現不同的模式destroy_confirmation_modal
。 如何以適當的方式做到這一點? if
有條件,我應該放在哪里?
代碼被剪輯為edit.html.erb
<div class="row">
<div class="col-sm-12 col-md-12 col-xs-12 text-center bank-employee__button-wrapper bank-employees-users-registration__registrations-submit--wrapper">
<a href="javascript:void(0)" id="primaryDestroyButton" class="bank-employee__button bank-employee__button-delete"><%= t('.delete') %></a>
<%= f.submit t('.submit'), id: "formSubmit", class: "bank-employee__button bank-employee__button-submit"%>
</div>
</div>
<% end %> // this `end` comes from `form_for`
<%= button_to "", bank_employee_path(@bank_employee), method: :delete, form: {id: "bankEmployeeDestroyForm" }, class: "bank-employee__button-destroy" %>
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<%= link_to bank_employees_path do %>
<span class="bank-employee__back-button">
<%= image_tag "icon_back.svg", alt: "Back icon", class: ""%>
<%= t('.back') %>
</span>
<% end %>
</div>
</div>
</div>
<%= render "destroy_confirmation_modal" %>
我不認為應該更新控制器方法,但也許我錯了?
controller.rb
def destroy
authorize current_bank_employee
@bank_employee = find_bank_employee(params[:id])
if @bank_employee.users.any? && associated_bank_employees.present?
reassign_users_and_notify_bank_employee
elsif @bank_employee.users.any?
render :edit
else
@bank_employee.destroy
render :destroy_notice, locals: { old_bank_employee: @bank_employee, assigned: false }
end
end
編輯
我的routes.rb
resources :bank_employees, except: [:show], concerns: [:with_datatable] do
member do
get :confirm
end
end
rails routes
向我顯示此路徑為confirm_bank_employee
因此if
條件如下,我已進行了更改
<% if @bank_employee.users.empty? %>
<%= button_to "", confirm_bank_employee_path(@bank_employee), form: {id: "bankEmployeeDestroyForm" }, class: "bank-employee__button-destroy", remote: true %>
<% else %>
<%= button_to "", bank_employee_path(@bank_employee), method: :delete, form: {id: "bankEmployeeDestroyForm" }, class: "bank-employee__button-destroy" %>
<% end %>
您需要一種不同的方法。
<% if @bank_employee.clients.empty? %>
<%= button_to "", bank_employee_confirm_path(@bank_employee), form: {id: "bankEmployeeDestroyForm" }, class: "bank-employee__button-destroy", remote: true %>
<% else %>
<%= button_to "", bank_employee_path(@bank_employee), method: :delete, form: {id: "bankEmployeeDestroyForm" }, class: "bank-employee__button-destroy" %>
<% end %>
現在您需要兩件事:
在routes.rb中,為您的blank_employee_confirm_path創建一個集合:
無論您使用哪種設置,我都假設您有某種blank_employees資源路徑:
resources :blank_employees do
member do
get :confirm
end
end
現在,在您的控制器內部,您需要添加方法確認:
def confirm
## do whatever you want do to here
render :js
end
然后將轉到confirm.js
在blank_employees視圖文件夾中創建一個Confirm.js.erb文件。 為了確認這是可行的,您可以在其中添加console.log('it works')。
確認它可以正常工作后,您可以將JavaScript代碼添加到Confirm.js.erb文件中:
$('#modal-body').html('<%= escape_javascript(render :partial => 'shared/your_confirmation_modal'%>');
使用此設置,您需要在edit.html.erb文件中使用<div id="modal-body"></div>
作為模態。 還要注意,在我的示例中,確認模式存儲在"views/shared/_your_confirmation_modal.html"
。 更改您的設置路徑或創建確切的路徑以使此工作!
請注意,“確認”路徑適用於沒有客戶的blank_employees。 僅當沒有客戶端時才呈現按鈕。 您之前為客戶的blank_employees提供的所有其他邏輯保持不變。 您無需更改任何內容。 如果您內部有任何空白的邏輯,而沒有任何客戶端,請將代碼移至Confirm方法。
還有一件事:確保還向您的destroy方法中添加一個render:js,然后在destroy.js.erb內部添加與Confirm.js.erb內部相同的邏輯,此外,您還希望為blank_employees呈現模式。與客戶。 您的destroy.js.erb文件應如下所示:
$('#modal-destroy').html('<%= escape_javascript(render :partial => 'shared/your_destroy_modal'%>');
非常重要:與第一個模態一樣,將<div id="modal-destroy"></div>
到您的edit.html.erb文件中,否則它將無法呈現模態。
如果不清楚,請通知我!
問候!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.