在我看来,我有两位radio_button
表单助手:Yes
和No
我还有一个check_box
,标识符为:agreement
这是我的代码:
%h6 Is this a membership?
= f.radio_button :agreement, true, id: "membership_yes"
= f.label :agreement, "Yes", value: true
= f.radio_button :agreement, false, id: "membership_no"
= f.label :agreement, "No", value: false
%br/
= f.check_box :agreement, type: "checkbox", id: "agreement-box"
= f.label :agreement, label: "I acknowledge that I have completed at least 8 workouts for the month."
在我的rails模型中,我想在:agreement
复选框上执行验证。
如果选择Yes
,则显示复选框并将其设为必填项。如果选择了No
,则隐藏该复选框并使其不是必需的。
我非常感谢任何有助于我指明正确方向的帮助或资源。
我尝试使用Jquery隐藏,显示并将复选框的id
属性设置为required
或{{1},同时提供单选按钮和复选框false
}。
我只能显示和隐藏复选框。将true
属性设置为required
或true
时,无论我按下false
按钮
如果有更好的方法来组织我的代码,我将不胜感激。提前致谢!
答案 0 :(得分:3)
首先,为模型中的单选按钮添加属性访问器。
attr_accessor :show_agreement
更改表单
%h6 Is this a membership?
= f.radio_button :show_agreement, true, id: "membership_yes", name: "agreement_radio_buttons"
= f.label :show_agreement, "Yes", value: true
= f.radio_button :show_agreement, false, id: "membership_no", name: "agreement_radio_buttons"
= f.label :show_agreement, "No", value: false
%br/
#agreement-box
= f.check_box :agreement, type: "checkbox"
= f.label :agreement, label: "I acknowledge that I have completed at least 8 workouts for the month."
单选按钮更改时显示/隐藏复选框,
$(document).ready(function(){
$("input[name$='agreement_radio_button']").click(function() {
var showCheckBox = $(this).val();
if (showCheckBox) {
$("#agreement-box").show();
} else {
$("#agreement-box").hide();
$("#agreement-box input").prop('checked', false);
}
});
});
最后但并非最不重要的是,在模型中添加验证,
validates :agreement, acceptance: {accept: true}, if: :needs_agreement_acceptance?
private
def needs_agreement_acceptance?
show_agreement
end
我还没有测试过,但我想你会好的。 此外,确保在(重新)加载页面时显示或隐藏协议框,具体取决于单选按钮的预选。
关于不提交表单
您可以停用提交按钮,并选中更改复选框的时间。如果是,请删除禁用attr。
$('#agreement_box').on('change', 'input', function() {
if (self.is(":checked")) {
$('#submit-btn').removeAttr('disabled')
} else {
...
}
});
很抱歉没有更彻底