仅当其他 simple_form 字段等于某个输入时才验证存在?
Validating the presence only if other simple_form field equals certain input?
在我的 simple_form 中,用户可以 select 一个 discount_type
。使用 JQuery,apply_on
字段在加载 DOM 时隐藏,仅在 discount_type
percent 为 [=34 时显示=]编辑。
问题:
当 discount_type
percent
被 select 编辑时,我只想验证 apply_on
的存在,但我不知道 how/where 可以这样做吗?
形式
<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>
根据 Max 的回答,我可以将以下内容添加到折扣模型中:
validates_presence_of :apply_on, if: ->{ discount_type == 'percent' }
在我的 simple_form 中,用户可以 select 一个 discount_type
。使用 JQuery,apply_on
字段在加载 DOM 时隐藏,仅在 discount_type
percent 为 [=34 时显示=]编辑。
问题:
当 discount_type
percent
被 select 编辑时,我只想验证 apply_on
的存在,但我不知道 how/where 可以这样做吗?
形式
<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>
根据 Max 的回答,我可以将以下内容添加到折扣模型中:
validates_presence_of :apply_on, if: ->{ discount_type == 'percent' }