#javascript #forms #ruby-on-rails-4 #controller #destroy
#javascript #формы #ruby-on-rails-4 #контроллер #уничтожить
Вопрос:
В некоторых моих формах у меня есть дополнительное всплывающее подтверждение «Вы уверены?» прежде чем это действительно уничтожит запись. Я использую Rails 4 и simple_form. Вот пример.
У меня есть модель под названием Promotions, а другая — PromotionPurchase.
Модели:
class Promotion < ActiveRecord::Base
has_many :promotion_purchases, dependent: :destroy
end
class PromotionPurchase < ActiveRecord::Base
belongs_to :user
belongs_to :promotion
end
Схема
create_table "promotion_purchases", force: true do |t|
t.integer "user_id"
t.integer "promotion_id"
t.string "status"
t.string "stripe_card_token"
t.string "phone"
t.string "full_name"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "promotion_purchases", ["promotion_id"], name: "index_promotion_purchases_on_promotion_id"
add_index "promotion_purchases", ["user_id"], name: "index_promotion_purchases_on_user_id"
create_table "promotions", force: true do |t|
t.string "name"
t.text "description"
t.integer "cost_in_cents"
t.integer "amount_available"
t.string "category"
t.datetime "start_date"
t.datetime "end_date"
t.datetime "created_at"
t.datetime "updated_at"
end
И форма:
<div class="content-box">
<%= simple_form_for [:admin, @promotion] do |f| %>
<fieldset id="promotion-form-info">
<%= f.input :name %>
<%= f.input :description %>
<%= f.input :category %>
<%= f.input :cost_in_cents, as: :string %>
<%= f.input :amount_available, as: :string %>
<%= f.input :start_date, :as => :date_picker %>
<%= f.input :end_date, :as => :datetime_picker %>
<%= f.button :submit, class: 'btn btn-sm btn-success' %>
</fieldset>
<% end %>
<% if @promotion.id != nil %>
<fieldset id="promotion-form-purchases">
<h3>Purchases:</h3>
<% if !@purchases.empty? %>
<table class="table">
<tr>
<th>Name</th>
<th>Email</th>
<th>Phone</th>
<th>Status</th>
<th></th>
</tr>
<% @purchases.each do |purchase| %>
<tr>
<td><%= purchase.full_name %></td>
<td><%= purchase.user.email if purchase.user %></td>
<td><%= purchase.phone %></td>
<td><%= purchase.status %></td>
<td>
<%= link_to "Edit", edit_admin_promotion_promotion_purchase_path(@promotion, purchase), class: "btn btn-xs btn-success" %>
<%= link_to 'Delete', [:admin, @promotion, purchase], method: :delete, data: { confirm: 'Are you sure?' }, class: "btn btn-xs btn-danger" %>
<%= "<- Editing this purchase" if @purchase amp;amp; purchase.id == @purchase.id %>
</td>
</tr>
<% end %>
</table>
<% end %>
<p>
<%= link_to "Add Purchase", new_admin_promotion_promotion_purchase_path(@promotion), class: "btn btn-sm btn-primary" %>
</p>
</fieldset>
<% end %>
</div>
И контроллер
class Admin::PromotionPurchasesController < ApplicationController
layout 'admin'
before_action :set_promotion
before_action :set_purchase, only: [:edit, :update, :destroy]
def destroy
@purchase.destroy
redirect_to new_admin_promotion_promotion_purchase_path(@promotion), success: 'PromotionPurchase was deleted.'
end
private
def set_promotion
@promotion = Promotion.find(params[:promotion_id])
end
def set_purchase
@purchase = PromotionPurchase.find(params[:id])
end
end
Есть идеи, почему я вижу «Вы уверены?» дважды вместо только одного раза, когда я удаляю PromotionPurchase из формы для редактирования рекламной акции?
В этом случае я видел это три раза:
Комментарии:
1. Можете ли вы опубликовать этот снимок?
2. можете ли вы опубликовать свой макет, файл маршрутов?
3. Удаление является разрушительным. Заявите, что это желаемое поведение для предотвращения случайной потери данных, и отправьте его;] / шутки
Ответ №1:
Опубликованный вами код, похоже, в порядке.
Я думаю, что проблемы возникают из-за javascript. (проверьте консоль, возможно, вы там что-то увидите)
Кроме того, вы, возможно, импортировали jquery_ujs
много раз, попробуйте удалить jquery_ujs
from application.js
и посмотрите, произойдет ли что-нибудь, если импортируется только один раз, вы не должны получать это диалоговое окно.
Комментарии:
1. Когда я удаляю эту строку из application.js , я вообще не получаю диалоговое окно, и это выдает мне ошибку маршрутизации.
2. Вы видите эту ошибку маршрутизации в журналах сервера или в браузере?
3. Это нормально, jquery_ujs отвечает за обработку
method
параметров. Без этого ссылка становится простым получением , и я предполагаю, что у вас нет маршрута показа ?
Ответ №2:
Попробуйте просто ввести простое <script>
в форму и поместить туда предупреждение. Если это предупреждает 3 раза, значит, ваша проблема заключается в загрузке файла слишком много раз.