为相关数据库创建Rails下拉列表

时间:2011-01-19 19:16:18

标签: ruby-on-rails forms activerecord drop-down-menu relational-database

我有2个模型,场地和区域(区域由id和name字段组成)。它们的关联点是:一个区域有许多场地,每个场地都属于一个区域。

将我正在输入area_id号码的区域分配到创建新场地页面的文本字段中。然后我可以显示场地所属的区域:

<%= venue.area.name %>

我不想输入表格中区域的ID号,而是希望有一个下拉列表,列出所有区域记录的区域名称,以及在保存时与所选区域相关联的区域名称。

新的场地形式:

<% form_for @venue do |f| %>
  <p>name: <br>
  <%= f.text_field :name %></p>

  <p>address line 1: <br>
  <%= f.text_field :addressline1 %></p>

  <p>address line 2: <br>
  <%= f.text_field :addressline2 %></p>

  <p>address line 3: <br>
  <%= f.text_field :addressline3 %></p>

  <p>area_id: <br>
  <%= f.text_field :area_id %></p>

  <%= submit_tag %>
<% end %>

我试过了:

  <p>area_id: <br>
  <%= collection_select(:area, :name, @areas, :id, :name) %>

但是得到:

  

当你没有时,你有一个零对象   期待它!你可能已经预料到了   数组的实例。
发生错误   在评估nil.map

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:29)

看起来@areas未定义,也可能是其他几个问题。试试这个:

<%= f.collection_select(:area_id, Area.all, :id, :name) %>

答案 1 :(得分:0)

正如诺布尔所说,这是对的! 如果您想按名称订购,只需使用以下内容:

<%= f.collection_select :area_id, Area.order(:name), 
    :id, :name %>