簡體   English   中英

Rails如何為銷毀動作呈現兩種不同的模態

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM