Ich kann nicht herausfinden, was ich in meiner edit.js.slim
Datei falsch mache . Es werden keine Validierungen angezeigt, wenn die erforderlichen Felder leer sind.
Regler
# frozen_string_literal: true
class MerchantsController < ApplicationController
include ControllerHelpers::StrongParameters
def index
@merchants = Merchant.all.load
end
def edit
merchant
end
def update
merchant
respond_to do |format|
if @merchant.update(update_params)
format.js { redirect_to merchants_path, notice: 'Merchant was successfully updated.' }
format.json { render :show, status: :ok, location: @merchant }
else
format.js { render :edit }
format.json { render json: @merchant.errors, status: :unprocessable_entity }
end
end
end
private
def merchant
@merchant ||= Merchant.find(params[:id])
end
def update_params
params.require(:merchant).permit(permitted_merchant_update_attributes)
end
end
edit.js.slim # Dies zeigt keinen Validierungsfehler im Formular an, auch wenn ich 700 Mal klicke
| $('.divTable.blueTable').bind('ajax:success', function () { $(this).hide().parent().append("
= j render 'inline_edit_form', merchant: @merchant
| "); })
_inline_edit_form.html.slim
= simple_form_for @merchant, id: dom_id(@merchant, 'inline_edit_form'), remote: true do |f|
= f.error_notification
= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present?
.divTable.blueTable
.divTableHeading
.divTableRow
.divTableHead
| Name
.divTableHead
| Description
.divTableHead
| Email
.divTableHead
| Status
.divTableHead[colspan="2"]
| Actions
.divTableBody
.divTableCell
= f.input :name, label: false
.divTableCell
= f.input :description, label: false
.divTableCell
= f.input :email, label: false
.divTableCell
= f.input :status, label: false
.divTableCell
= f.button :submit, class: 'btn btn-primary btn-block btn-sm'
update.js.slim
| $('.refresh').bind('ajax:success', function () { $(this).hide().parent(); })
Seitenquelltext
Bei dem Versuch, es zu lösen, habe ich eine andere Lösung in meinem gefunden edit.js.slim
, die Validierungen anzeigt, aber wenn ich zum zweiten Mal auf die Schaltfläche "Aktualisieren" klicke, wird sie zu marchant_path umgeleitet, die auf HTML reagiert, anstatt im Formular zu bleiben und Validierungsverstöße anzuzeigen.
| $('.divTable.blueTable').replaceWith('
= j render 'inline_edit_form'
| ');
Hinweis : Ich verwende Rails 6.1.0
Basierend auf dem, was ich in der Seitenquelle meines Browsers habe, edit.js.slim
liegt das Problem. Das ist mir eingefallen:
index.html.slim
.container
= flash_messages_for(@merchant)
h2.title-format[id="merchant-title"]
= t('merchant_page.table_heading.title')
.divTable.blueTable
.divTableHeading
.divTableRow
.divTableHead
| Name
.divTableHead
| Description
.divTableHead
| Email
.divTableHead
| Status
.divTableHead
| Transaction Sum
.divTableHead[colspan="2"]
| Actions
.divTableBody
= render @merchants
Was ich in der Seitenquelle meines Browsers habe
_inline_edit_form.html.slim
= simple_form_for @merchant, remote: true do |f|
.container
h2.title-format
= t('edit_page.edit_page_heading.edit')
= f.error_notification
= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present?
.divTable.blueTable
.divTableHeading
.divTableRow
.divTableHead
| Name
.divTableHead
| Description
.divTableHead
| Email
.divTableHead
| Status
.divTableHead
| Actions
.divTableBody
.divTableCell
= f.input :name, label: false
.divTableCell
= f.input :description, label: false
.divTableCell
= f.input :email, label: false
.divTableCell
= f.input :status, label: false
.divTableCell
= f.button :submit, class: 'btn btn-primary btn-block btn-sm'
edit.js.slim
Das ist es, was ich in meiner edit.js.slim
Datei gefunden habe, damit es richtig funktioniert.
| $('.divTable.blueTable').hide().parent().prepend('
= j render 'inline_edit_form', merchant: @merchant
| ');
| $('form#edit_merchant_
= @merchant.id
| ').hide().parent().append("
= j render 'inline_edit_form', merchant: @merchant
| ");
| $("h2#merchant-title").remove(".title-format");
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen