Rails项目Html.haml模板if条件判断无法正确生效问题求助
问题根因
你现有的两个判断条件为包含关系:
- 第一个触发下拉框的条件:
@form_settings.formable_type == "Campaign" and @form_settings.students.present? - 第二个触发输入框的条件,是在第一个条件的所有判断项基础上,额外增加了
@form_settings.enable_student_name == true的限制
所以当第二个条件成立时,第一个条件必然也同时成立,两个分支的渲染逻辑都会执行,自然会同时展示两个组件。
修复方案
将两个分支调整为互斥的条件判断结构即可,以下是两种可行的修改方案:
方案1:嵌套判断(代码更简洁)
- if @form_settings.formable_type == "Campaign" and @form_settings.students.present? - if @form_settings.enable_student_name %label.control-label Student Name .grid.margin15 = f.input :student_name, label: false, placeholder: 'Student Name', input_html: { class: 'control-field' } - else %label.control-label Student Name .grid.margin15 = f.select :student_id, options_for_select(@form_settings.students.map{ |c| [c.first_name + ' ' + c.last_name, c.id] }), {include_blank: "Select Student"}
方案2:平级互斥判断
-# 仅渲染学生id下拉框的分支 - if @form_settings.formable_type == "Campaign" and @form_settings.students.present? and !@form_settings.enable_student_name %label.control-label Student Name .grid.margin15 = f.select :student_id, options_for_select(@form_settings.students.map{ |c| [c.first_name + ' ' + c.last_name, c.id] }), {include_blank: "Select Student"} -# 仅渲染学生姓名输入框的分支 - elsif @form_settings.formable_type == "Campaign" and @form_settings.enable_student_name == true and @form_settings.students.present? %label.control-label Student Name .grid.margin15 = f.input :student_name, label: false, placeholder: 'Student Name', input_html: { class: 'control-field' }
两种方案都可以保证两个渲染逻辑只会触发其中一个,不会出现同时展示的问题。
内容的提问来源于stack exchange,提问作者shashank barman
相关产品推荐
相关产品推荐

