Проверка 2 полей формы в представлении от одной модели

я не понимаю. Как я могу проверять отдельно 2 поля формы в представлении. Сегодня я узнал, что валидация в модели всегда проверяет все объекты в модели, а не объект, который передается через параметр. Теперь я пытаюсь выяснить, как проверить только объект, который предоставляется через поле формы.

HTML

%td
 = form_for opportunity, remote: true do |f|
 = f.text_field :boni_score, placeholder: '0.0 - 6.0'
 = f.submit "Bonität hinzufügen", class: "block btn btn-sm btn-primary marginTop"
 %td
 = form_for opportunity, remote: true do |f|
 = f.text_field :schufa_score, placeholder: '0-9999'
 = f.text_field :schufa_range, placeholder: 'A-P oder Unbekannt', class: 'marginTop'
 = f.submit "Speichern", class: "block marginTop btn btn-sm btn-info"

Проверка

SCHUFA_RANGE =* ('A'..'P')
 SCHUFA_RANGE << 'Unbekannt'

 validates :schufa_range, inclusion: SCHUFA_RANGE, on: :update, if: :boni_score_blank?
 validates :schufa_score, numericality: { only_integer: true }, length: { maximum: 9999, minimum: 0 }, on: :update, if: :boni_score_blank?
 validates :boni_score, numericality: { only_integer: false }, length: { maximum: 6, minimum: 0 }, if: :schufa_blank?

 def boni_score_blank?
 boni_score.blank?
 end

 def schufa_blank?
 schufa_range.blank? || schufa_score.blank?
 end

когда я нажимаю кнопку отправки для одного, тогда дыра думает, что она проверяется. на самом деле, я не понимаю логики этого. Можно ли проверить каждый объект, который в данный момент находится в параметре?

1 ответ

Хорошо, ребята, у меня есть решение

validates :schufa_range, inclusion: SCHUFA_RANGE, on: :update, if: proc { |opportunity| opportunity.schufa_range_changed? }
validates :schufa_score, numericality: { only_integer: true, greater_than_or_equal_to: 0, less_than_or_equal_to: 9999 }, on: :update, if: proc { |opportunity| opportunity.schufa_score_changed? }
validates :boni_score, presence: true, numericality: { greater_than_or_equal_to: 0, less_than_or_equal_to: 6 }, on: :update, if: proc { |opportunity| opportunity.boni_score_changed? }

Валидация происходит сейчас, когда изменяются объекты model.object.

licensed under cc by-sa 3.0 with attribution.