ruby-on-rails - 电子邮件/网址的自定义 Rails 表单验证
问题描述
我有一个包含两个单选按钮、电子邮件或 URL 的表单。在我的模型中,这两个字段是必需的,但我只希望其中一个取决于单击的单选按钮。
潜在的解决方案:添加隐藏字段并将参数传递到我可以验证的模型中?
<%= form_for @webhook do |f| %>
<div class="form-group">
<div class="checkbox email">
<label>
<%= f.radio_button :show_url_form, 0, checked: true %>
Lorum Ipsum
</label>
</div>
<div class="checkbox url">
<label>
<%= f.radio_button :show_email_form, 1, checked: false %>
Lorum Ipsum
</label>
</div>
</div>
<div class="form-group url">
<div class="form-group">
<%= f.hidden_field :perform_validation, value: true %>
<%= f.label :url %>
<%= f.text_field :url, class: "form-control", autofocus: true %>
</div>
<div class="form-group email" style="display: none;">
<%= f.label :email %>
<%= f.text_field :email %>
<label class="radio-inline">
<%= f.radio_button :format, 'formatone' %> formatone
</label>
<label class="radio-inline">
<%= f.radio_button :format, 'formattwo' %> formattwo
</label>
</div>
<% end %>
模型:
validates :url, presence: true
validates :email, presence: true
解决方案
在您的模型中,您可以向两个验证添加条件...
attr_accessor :skip_url_validations
attr_accessor :skip_email_validations
validates_presence_of :url, unless: :skip_url_validations
validates_presence_of :email, unless: :skip_email_validations
然后在您的控制器中,您可以根据表单传入的参数将skip_url或skip_email设置为true......像这样
@webhook = Webhook.new(webhook_params)
@webhook.skip_email_validations = true if params.has_key?(:url)
@webhook.skip_url_validations = true if params.has_key?(:email)
推荐阅读
- sql - 使用 Coalesce 更新 SQL / 跟踪多个表中的更新记录
- azure - 通过 Webhook url 触发 Azure Web Jobs
- mysql - 尝试执行本地数据库的 mysqldump 时权限被拒绝
- javascript - 如何删除对象键的空格?[for...in] [keys.forEach] [减少]
- python - 确定 textCtrl 是否滚动到缓冲区的末尾
- java - 基于条件的弹簧配置文件
- javascript - 如何在 Typescript 中正确输入 HOC?
- kubernetes - Kubernetes - 如何读取写入 pod 文件而不是 stdout/stderr 的日志?
- php - CollectionType 中的 EntityType:获取 query_builder 中的当前对象
- rest - JWT 授权令牌在客户端生成,但在 API 中不起作用