You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:33:02