首页 > 解决方案 > 如何在 Rails 6 中检查字段是否具有验证?

问题描述

我有一个Address包含以下验证的模型:

with_options if: Proc.new{|i| i.country && i.country.downcase == "united states"} do
    validates :state, presence: true
end

在我的新表单和编辑表单中,我想检查状态字段是否是必需的。以下函数返回存在验证,但它没有考虑我的条件。

Address.new._validators[:first_name]

此代码返回

[#<ActiveRecord::Validations::PresenceValidator:0x00007fadebc9d8a8 @attributes=[:first_name], @options={:if=>#<Proc:0x00007fadebc9ebb8@/Users/cannonmoyer/Documents/RailsProjects/treadmilldoctorrails/app/models/address.rb:18>}>]

有没有办法为验证运行条件,以便在场验证器不会出现在每个实例上?我想用它在我的 HTML 中设置必填字段。

标签: ruby-on-railsrubyruby-on-rails-6

解决方案


为什么不将条件单独放入方法中,然后您可以在视图中使用相同的方法来确定是否要显示状态选择。

validates :state, presence: true, if: :state_required?

def state_required?
  country && country.downcase == "united states"
end

在您看来,您可以执行以下操作:

<% if @address.state_required? %>
  # state select
<% end %>

推荐阅读