如何使用select_tag下拉列表将项目与列表关联

时间:2016-08-13 20:20:47

标签: ruby-on-rails form-helpers

我有Item和List模型,它们都是关联的。列出has_many项和项目belongs_to列表

架构:

  create_table "items", force: :cascade do |t|
    t.string   "name"
    t.integer  "list_id"
    t.datetime "created_at",                 null: false
    t.datetime "updated_at",                 null: false
    t.boolean  "completed",  default: false
  end

  create_table "lists", force: :cascade do |t|
    t.string   "name"
    t.integer  "user_id"
    t.datetime "created_at",                     null: false
    t.datetime "updated_at",                     null: false
    t.string   "permission", default: "private"
  end

我想创建一个视图(很可能是items/new.html.erb)所以当用户创建一个新项目时,会有一个下拉选项供用户选择它所属的列表。开头会有一个预定义的列表(即:List name"Home", "Work", "Personal")。用户所做的任何项目都将与这三者中的任何一项相关联。

现在我有一个项目new.html.erb视图,其中包含简单的项目名称和list_id

  <%= form_for @item do |f| %>

    <%= f.label :name %><br>
    <%= f.text_area :name, size: "24x12" %><br>
    <%= f.label :list_id %><br>
    <%= f.text_field :list_id %><br>
    <%= f.submit %>

<% end %>

手动输入list_id非常不方便;经过研究,似乎select_tag是完成这项工作的最佳形式助手。

enter image description here

enter image description here

如何构建显示3个下拉列表的select_tag,用户可以选择将其与Item关联到List

1 个答案:

答案 0 :(得分:1)

您也可以使用select,因为您使用表单来实现此目的。既然你提到List name是预先定义的,你就可以这样做:

 <%= f.select :list_id,  options_for_select([['Home', 1], ['Work', 2], ['Personal', 3]]), {:include_blank => true} %>

注意: ['Home', 1] home在此1的ID为{:include_blank => true},以包含空白。