如何从数据库迭代数据成为模板中的单选按钮?

时间:2015-06-17 03:40:00

标签: ruby-on-rails ruby ruby-on-rails-4

我正在使用Rails 4.2和Ruby 2.1.5

这是我的新模板的单选按钮代码:

<%= form_for @api, :url => commons_path do |f| %>
  <div class="form-group">
      <%= f.label :status, "Status",  class: "col-sm-2 control-label" %>
        <div class="col-sm-8">
          <%= f.radio_button :status, 'success' %>
          <%= label_tag(:status, "Success") %> 
          <%= f.radio_button :status, 'fail' %>
          <%= label_tag(:status, "Fail") %> 
          <%= f.radio_button :status, 'exception' %>
          <%= label_tag(:status, "Exception") %> 
       </div>
      </div>
</end>

现在,我想在数据库中创建一个新表来存储不同的状态。

create_table "statuses", force: :cascade do |t|
  t.string   "status"
  t.datetime "created_at"
  t.datetime "updated_at"
end

如何从数据库中迭代数据,使其成为模板中的单选按钮,这样我就不必每次都在模板中对单选按钮进行硬编码。

1 个答案:

答案 0 :(得分:1)

您可以迭代所有状态记录(*)。

在您的控制器中,您可以添加:

@statuses = Status.all

在你看来:

<%= form_for @api, :url => commons_path do |f| %>
  <div class="form-group">
    <%= f.label :status, "Status",  class: "col-sm-2 control-label" %>
    <div class="col-sm-8">
      <% @statuses.each do |status| %>
        <%= f.radio_button :status, status.status %>
        <%= label_tag(:status, status.status) %> 
      <% end %>
    </div>
  </div>
<% end %>

(*)如果您有数百种状态,请小心,因为这会立即将所有状态加载到内存中。