ruby-on-rails - 如何在 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 中设置必填字段。
解决方案
为什么不将条件单独放入方法中,然后您可以在视图中使用相同的方法来确定是否要显示状态选择。
validates :state, presence: true, if: :state_required?
def state_required?
country && country.downcase == "united states"
end
在您看来,您可以执行以下操作:
<% if @address.state_required? %>
# state select
<% end %>
推荐阅读
- python - 如何使用按钮单击 tkinter 设置选项菜单
- c - 在 C 中使用浮点数计算模数时出现问题
- bash - 将容器从 GitLab 部署到 EC2 的正确方法
- enums - 在性能层面上,特征是否比枚举更昂贵?
- docker - 覆盖 docker-compose 的命令,然后运行原始命令
- python - 您无权访问此资源 Python webscraping
- c - 为什么在使用变量作为指向字符数组的指针调用函数时出现分段错误?
- git - 无法从 Azure DevOps 或 VS-2017 克隆
- typescript - 映射数组以实现特定的对象类型
- javascript - Node.js 不从发布请求返回值