Проверка вложенности модели Rails запускается только тогда, когда что-то заполнено - PullRequest
0 голосов
/ 28 августа 2018

У меня есть форма, которая выглядит примерно так:

<%= form_with model: @user, url: wizard_path, method: :patch, local: true do |f| %>
  <%= f.fields_for :asset_transfers do |asset_transfer_form| %>
    <%= asset_transfer_form.text_field :account_number, autofocus: true, class: "form-control" %>
    <div class="invalid-feedback"> <%= @user.errors.messages[:"asset_transfers.account_number"].join(", ") %> </div>
    <%= asset_transfer_form.text_field :institution_number, class: "form-control" %>
    <div class="invalid-feedback"><%= @user.errors.messages[:"asset_transfers.institution_number"].join(", ") %></div>
  <% end %>
<% end %>

Вот моя ассоциация:

user.rb
has_many :asset_transfers, dependent: :destroy
accepts_nested_attributes_for :asset_transfers, allow_destroy: true

asset_transfer.rb
belongs_to :user
validates :account_number, :institution_number, presence: true, numericality: true

Когда я заполняю форму, если я отправляю пустое поле для обоих полей, ошибки не отображаются и @user.save возвращает true. Однако, если я наберу случайную строку в одном из полей и отправить отображаются ошибки, и @user.save теперь возвращает ложь. Я действительно понятия не имею, почему это происходит, и не смог найти что-либо связанное с Google. Благодарим за любую помощь!

РЕДАКТИРОВАТЬ: Эти поля имеют тип bigint. Я написал миграцию, чтобы изменить их на string, и теперь она работает нормально. Когда я отправляю ничего не заполнив, я вижу ошибки для них, а не число. Все еще интересно узнать, почему проверки не работали с bigint.

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете добавить reject_if: :all_blank к вашему accepts_nested_attributes_for, чтобы запретить пустые вложенные записи, несмотря на типы данных.

...