Rails 嵌套模型验证仅在填充内容时运行

Rails nested model validation only runs when something is filled

我有一个看起来像这样的表格:

<%= 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 returns true。但是,如果我输入一个随机字符串 在其中一个字段中提交,出现错误并且 @user.save 现在 returns 错误。我真的不知道为什么会这样,并且在 Google 上找不到任何相关内容。感谢您的帮助!

编辑:这些字段的类型为bigint。我写了一个迁移来将它们更改为 string 并且它现在工作正常。当我提交时没有填写任何内容,我看到错误是空白而不是数字。仍然有兴趣知道为什么验证不适用于 bigint

您可以将 reject_if: :all_blank 检查添加到您的 accepts_nested_attributes_for 以不允许空嵌套条目,无论数据类型如何。