使用for循环为选择器输入创建选项?

时间:2018-07-24 16:20:52

标签: html ruby-on-rails

我正在创建一个下拉列表,其中包含所有用户姓名缩写的列表。现在,我的代码正在显示所有用户,因为我手动输入了每个用户。

HTML

<span id="msQuotedBySearch">
    <b>Filter by Initials: </b>
    <select id="msQuotedBy">
        <option value="all">All</option>
        <option value="ZR">ZR</option>
        <option value="TM">TM</option>
        <option value="jh">jh</option>
        <option value="TD">TD</option>
        <option value="LG">LG</option>
        <option value="BCS">BCS</option>
        <option value="DLH">DLH</option>
        <option value="jr">jr</option>
        <option value="CP">CP</option>
        <option value="LR">LR</option>
        <option value="SA">SA</option>
        <option value="TN">TN</option>
        <option value="DB">DB</option>
        <option value="TF">TF</option>
        <option value="dev">dev</option>
        <option value="BK">BK</option>
    </select>
</span>

这不是很棒的代码,并且想知道如何使用for循环将每个用户正确地添加到下拉菜单中。

我考虑过要做这样的事情:

<span id="msQuotedBySearch">
    <b>Filter by Initials: </b>
    <select id="msQuotedBy">
        <option value="all">All</option>
            <% for user in @users
                initials = user.initials %>
                <option value=<%= initials %>><%= initials %></option>
            <% end %>
     </select>
</span>

但这只是添加了数据库中最后一个用户的首字母。

关于如何将数据库中的首字母缩写列表轻松添加到下拉菜单的任何想法?

1 个答案:

答案 0 :(得分:0)

我猜您是Rails的超级新手,而且看来也是StackOverflow的新手,所以欢迎两者。

如果您在前端使用Rails,而不仅仅是后端API,那么通常使用表单助手来创建Rails表单。

因此,如果您在创建数据库模型时使用了初学者风格的脚手架。通常会有许多这样的模型。因此,我们以带有类别名称的文章为例。

rails generate scaffold category name:string url:string
rails generate scaffold article category:belongs_to name:string description:text status:integer 

除了数据迁移和模型类之外,这还会创建一个控制器,一条路线和一组静态视图。

因此在此Article示例中,在您的app / views / articles / new.html.erb文件中,您将拥有类似

的内容
 <h1>New Article</h1>

 <%= render 'form', article: @article %>

 <%= link_to 'Back', articles_path %>

实际的表单帮助器位于部分form.html.erb

如果它是rails 5,默认情况下它将是一个form_with,rails 4或更少的会说form_for

<%= form_with(model: article, local: true) do |form| %>
  <% if article.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(article.errors.count, "error") %> prohibited this article from being saved:</h2>

      <ul>
      <% article.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
   <%= form.label :category_id %>
   <%= form.text_field :category_id %>
  </div>

  <div class="field">
    <%= form.label :name %>
    <%= form.text_field :name %>
  </div>

  <div class="field">
    <%= form.label :description %>
    <%= form.text_area :description %>
  </div>

  <div class="field">
    <%= form.label :status %>
    <%= form.number_field :status %>
  </div>


  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

但是对于类别,您想要显示一个选择列表,而不是让某人键入类别ID。由于Rails表单帮助程序会猜测要显示的字段,因此您只需执行

<div class="field">
  <%= form.label :category_id %>
  <%= form.collection_select(:category_id, Category.all, :id, :name) %>
</div>