仅当其他 simple_form 字段等于某个输入时才验证存在?

Posted

技术标签:

【中文标题】仅当其他 simple_form 字段等于某个输入时才验证存在?【英文标题】:Validating the presence only if other simple_form field equals certain input? 【发布时间】:2020-03-13 17:50:30 【问题描述】:

在我的 simple_form 中,用户可以选择 discount_type。使用 JQuery,当 DOM 加载时,apply_on 字段是隐藏的,并且仅在选择 discount_type percent 时显示。

问题: 我只想在选择 discount_type percent 时验证 apply_on 的存在,但我不知道如何/在哪里执行此操作?

表格

<div class="col col-sm-4"><%= f.input :discount_type, collection: ['percent', 'price'] %></div>
<div class="col col-sm-4 apply_on_percentage"><%= f.input :apply_on, collection: ['reservation total', 'accommodation total'], prompt: "Choose on what to apply the discount" %></div>

<script>
  // Hide form field when DOM is loaded
  $(document).ready(function()
    $('.apply_on_percentage').hide();
  );

  // Load form field when percentage is selected
  $(document).on("change", "#discount_discount_type", function()
    var discount_type = $(this).val();
    if(discount_type === 'percent')
      $('.apply_on_percentage').show();
     else
      $('.apply_on_percentage').hide();
    
  );


</script>

【问题讨论】:

您是在询问服务器端验证吗?在这种情况下,您可以只使用带有 lambda 的 if: 选项。 validates_presence_of :apply_on, if: -&gt; discount_type == 'percent' 。不过,我会使用 ActiveRecord::Enum 作为折扣类型。 嗨,Max,非常感谢。有效。对枚举的好评,认为这确实会使事情变得更高效/可扩展。 如果您想自己回答问题,请随意使用它。 【参考方案1】:

根据 Max 的回答,我可以在折扣模型中添加以下内容:

validates_presence_of :apply_on, if: -> discount_type == 'percent' 

【讨论】:

以上是关于仅当其他 simple_form 字段等于某个输入时才验证存在?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从 JSON 响应中生成 simple_form 字段?

JSR 303 验证,如果一个字段等于“某物”,则这些其他字段不应为空

仅当某个元素不等于给定列表中的元素时,如何编写条件语句才能执行? [复制]

使用 simple_form 格式化日期输入

simple_form: 禁用表单而不添加 disabled: true 或 readonly: true 到每个输入

仅当其用户 id 字段等于登录用户的 id 时才创建模型实例