【问题标题】:How can show the drop down value against the enum value如何根据枚举值显示下拉值
【发布时间】:2021-11-11 07:45:06
【问题描述】:

status 是一个下拉菜单,如果它是一项功能,则具有值(新、已启动、已完成);如果它是一个错误,则为(新、已启动和已解决)。我不知道我该怎么做

型号

Class Task
  enum typeOf: %i[feature bug]
  enum status_is: %i[New started completed resolved]
end

erb.html

<%= form_for :task, url: project_tasks_path, :html => {:multipart => true, :cla

   <%= f.hidden_field :project %>
   Title: <%=f.text_field :title, class:"form-control" %><br>
   Description: <%=f.text_field :description, class:"form-control" %><br>
   <label for="deadline">Deadline</label><input type="datetime-local" id="deadline"
                                         name="deadline" ><br>
   Screen Shot: <%=f.file_field :screen_shot, multiple: true, class:"form-control" %>
   <div class="field">
     <%= f.label :typeOf, class:"form-control" %><br />
     <%= f.select(:typeOf, Task.typeOfs.keys.map {|role| [role.titleize,role]}) %>
   </div>

   <div class="field">
     <%= f.label :status_is, class:"form-control" %><br />
     <%= f.select(:status_is, Task.status_is.keys.map {|role| [role.titleize,role]}) %>
   </div>
   <%= f.submit "Add" %>

<%end %>

【问题讨论】:

    标签: javascript ruby-on-rails ruby ruby-on-rails-3 erb


    【解决方案1】:

    我会选择两个单独的选择框,每个选择框都有预期的情况:

       <div class="field" data-target="bug">
         <%= f.label :status_is, class:"form-control" %><br />
         <%= f.select(:status_is, (Task.status_is.keys - ['completed']).map {|role| [role.titleize,role]}) %>
       </div>
    
       <div class="field" data-target="feature">
         <%= f.label :status_is, class:"form-control" %><br />
         <%= f.select(:status_is, (Task.status_is.keys - ['resolved']).map {|role| [role.titleize,role]}) %>
       </div>
    

    然后你使用一些 javascript 来切换它们的输入/输出:

    function toggleSelects() {
      var value = $('#task_typeOf')[0].value;
    
      $('[data-target=bug]').toggle(value === 'bug');
      $('[data-target=bug] select').attr('disable', value !== 'bug');
    
      $('[data-target=feature]').toggle(value === 'feature');
      $('[data-target=feature] select').attr('disable', value !== 'feature');
    }
    
    // execute every time the type of task is changed
    $('#task_typeOf').on('change', () => toggleSelects());
    
    // also execute at document load
    $(toggleSelects);
    

    当然,您可以使用不同的策略或包装器来隐藏字段禁用选择,但您必须同时执行这两种操作(无论如何都会提交隐藏的选择)。

    【讨论】:

    • 选择错误后仍然显示所有 4 个选项
    • @waqarahmad 你确定要限制选项吗? (Task.status_is.keys - ['completed']).map {|role| [role.titleize,role]}
    • 是的,我按照你写的方法做了
    • 你能把p Task.status_is.keys的输出粘贴到这里吗?
    • jQuery.Deferred 异常:无法读取未定义的属性(读取“值”)类型错误:无法在 HTMLDocument.toggleSelects 读取未定义的属性(读取“值”)
    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 2023-04-05
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多