Rails 6.1中form_for下拉选框required属性失效问题求助
解决Rails 6.1中form_for下拉选框required属性不生效的问题
问题出在你对f.select方法的参数传递方式上,Rails的form_for关联的select助手方法参数顺序和你之前的写法不符,导致required属性没被正确渲染到HTML里。
正确的写法
把prompt放在第三个参数(选项配置),required作为第四个独立的HTML属性参数传递:
<tr> <td>Badge Category:</td> <td><%= f.select :category, options_for_select(LivingMuayThai::Badge::BADGE_CATEGORIES, @badge.category), { prompt: "Select a Category" }, { required: true } %></td> </tr>
原因说明
f.select的参数结构是:f.select(字段名, 选项集合, 选项配置哈希, HTML属性哈希)
你之前把html: { required: true }嵌套在了第三个参数里,这是form_tag中select的写法,但form_for的select助手不需要嵌套html:键,直接把HTML属性作为第四个哈希参数传入即可。
验证效果
修改后生成的HTML会包含required属性:
<select id="living_muay_thai_badge_category" name="living_muay_thai_badge[category]" required> <option value="">Select a Category</option> <option value="Attendance">Attendance</option> <option value="Boxing">Boxing</option> <option value="Clinch">Clinch</option> ... </select>
此时浏览器会自动触发前端验证,用户必须选择非空值的选项才能提交表单,不用移除提示选项——空值的提示选项会被浏览器识别为未完成选择。
内容的提问来源于stack exchange,提问作者John Cowan
相关产品推荐
相关产品推荐

