仅当其他 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: -> discount_type == 'percent'
。不过,我会使用 ActiveRecord::Enum 作为折扣类型。
嗨,Max,非常感谢。有效。对枚举的好评,认为这确实会使事情变得更高效/可扩展。
如果您想自己回答问题,请随意使用它。
【参考方案1】:
根据 Max 的回答,我可以在折扣模型中添加以下内容:
validates_presence_of :apply_on, if: -> discount_type == 'percent'
【讨论】:
以上是关于仅当其他 simple_form 字段等于某个输入时才验证存在?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以从 JSON 响应中生成 simple_form 字段?
JSR 303 验证,如果一个字段等于“某物”,则这些其他字段不应为空
仅当某个元素不等于给定列表中的元素时,如何编写条件语句才能执行? [复制]