如何检查某个字段是否在 Rails 6 中进行了验证?

How can I check if a field has a validation in Rails 6?

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

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

在我的新表单和编辑表单中,我想检查州字段是否为必填项。以下函数 returns 存在验证但它没有考虑我的条件。

Address.new._validators[:first_name]

此代码returns

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

有没有办法 运行 验证的条件使得存在验证器不会出现在每个实例上?我想用它来设置我的 HTML.

中的必填字段

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

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

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

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

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