Я хочу сделать валидацию, которая суммирует значения вложенных полей, поэтому я уверен, что это 100%. Итак, в моей родительской модели я сделал бы проверку и сделаю self.errors.add
и добавлю ошибку, если проверка не удалась. Проблема в том, что errors.add
, если я знаю, ожидает какой-то атрибут как аргумент, но он не связан ни с одним атрибутом моей родительской модели, поэтому я хотел бы отобразить это сообщение в верхней части формы, например. Любые идеи о том, как я могу это сделать? Спасибо!Rails Simple Form - Добавить ошибку, не связанную с атрибутом
UPDATE:
Это мой родитель модель, где я хочу проверить. Форма имеет вложенные поля для :arrendamento_contrato_unidades.
class ArrendamentoContrato < ApplicationRecord
has_many :arrendamento_contrato_unidades, dependent: :destroy
validate :check_total_percentual_credito
def check_total_percentual_credito
if arrendamento_contrato_unidades.sum(&:percentual_credito).to_f != 100.0
self.errors.add :base, "Tem que ser 100%"
end
end
end
Мой метод создания, который это один я тестирование:
def create
@arrendamento_contrato = ArrendamentoContrato.new(arrendamento_contrato_params)
respond_to do |format|
if @arrendamento_contrato.save
format.html {
flash[:notice] = flash_notice
redirect_to action: "index"
}
format.json { render json: {status: 1, redirect: arrendamento_contratos_url} }
else
format.html { render :new }
format.json { render json: {status: 0, errors: @arrendamento_contrato.errors, status: :unprocessable_entity} }
end
end
end
--- Кроме того, я отлажена мои object.errors.full_messages на форме , и ошибка есть. Это только не отображается!
Я думаю, что добавить ошибки в базу, это то, что я ищу. Но теперь он не показывает мое сообщение, но только то, что у меня есть ошибки проверки. Мой код формы:
= simple_form_for(@arrendamento_contrato, validate: true, html: { id:"dropzoneForm", class: "dropzone dz-clickable"}) do |f|
= f.error_notification
.form-inputs
.row
.col-md-6
= f.input :numero
.col-md-6
= f.association :usina, input_html: {class: "chosen-select"}
.hr-line-dashed
.row
.col-md-6
= f.association :esco_contrato, input_html: {class: "chosen-select"}
.col-md-6
= f.association :om_contrato, input_html: {class: "chosen-select"}
.hr-line-dashed
.row
.col-md-4
= f.input :data_inicio, as: :string, input_html: {"data-mask" => "date"}
.col-md-4
= f.input :data_fim, as: :string, input_html: {"data-mask" => "date"}
.col-md-4
= f.input :valor_mensal, as: :string, input_html: {"data-mask" => "decimal"}
.hr-line-dashed
#arrendamento_contratos_unidades
- if [email protected]_contrato.arrendamento_contrato_unidades || @arrendamento_contrato.arrendamento_contrato_unidades.empty?
h3 = I18n.t('activerecord.models.unidade_consumidora.other')
i
'Aguardando ESCO...
- else
.row
.col-md-6
label class='control-label'
= I18n.t('activerecord.models.unidade_consumidora.other')
.col-md-6
label class='control-label'
= I18n.t('activerecord.attributes.arrendamento_contrato_unidade.percentual_credito')
.hr-line-dashed
.blockquote
= f.simple_fields_for :arrendamento_contrato_unidades do |f|
= render 'arrendamento_contrato_unidade_fields', f: f
.hr-line-dashed
Не могли бы вы привести пример кода того, что вы имеете в виду. Похоже, вы говорите, что у вас две модели, и вы хотите проверить сумму дочерних моделей на родительской модели, которая имеет много отношений с дочерней моделью. Это правильно? –
@CdotStrifeVII это точно! Я хочу обновить сообщение с помощью некоторого кода, всего за одну минуту PLS –