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
以不允许空嵌套条目,无论数据类型如何。
我有一个看起来像这样的表格:
<%= 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
以不允许空嵌套条目,无论数据类型如何。