ruby on rails如何使用FormOptionHelpers创建动态下拉列表

时间:2012-08-21 22:41:27

标签: ruby-on-rails ruby

我已经检查了一些教程但是我对这个方法中的参数感到困惑

collection_select(object,attribute,collection,value_method,text_method,options = {},html_options = {})

我有一个地图模型,包括:: area,:system,:file

我想从数据库中读取:area 到下拉列表,让用户选择一个

我已经在视图中执行了@ map = Map.all

该方法应该是什么?

特别是参数“attribute”。在很多教程中,人们把“id”放在这里。但我不知道“id”是什么,在我的情况下我不需要任何其他值,只需要“区域”。

2 个答案:

答案 0 :(得分:0)

我不完全确定你在这里问的是什么,但是如果你想在html表单中使用下拉选项,这个例子会对你有帮助吗?

<% nations = {'United States of America' => 'USA', 'Canada' => 'Canada', 'Mexico' => 'Mexico', 'United Kingdom'=> 'UK'} %>
<% list = nations.sort %>
<%= f.select :country, list, %>

这里的国家是国家的哈希,然后列表成为该哈希的排序副本。然后创建一个html下拉列表作为“f”形式的一部分。 “:country”是数据连接到的模型的一部分,而list是填充下拉列表的选项

答案 1 :(得分:0)

从您的问题中不清楚模型是该区域的填充物。

通常,在相关模型之间使用collection_select。

例如

class Category < ActiveRecord::Base
  has_many :products
end

class Product < ActiveRecord::Base
  belongs_to :category
end

为产品选择“类别”时,您的视图将具有以下内容:

<%= f.collection_select(:category_id, :id, Category.all, :name, include_blank: true) %>

这样做是将Product.category_id指定为使用Category.id的值填充的属性。值来自Category.all集合,而Category.name是select中显示的项。最后一个(可选)参数表示包含空白条目。

以下内容可能就是您所需要的:

<%= f.collection_select(:map_id, :id, @map, :area) %>

但是,如果您尝试填充的模型具有区域属性(而不是链接到地图的ID),则可能需要使用:

<%= f.collection_select(:area, :area, @map, :area) %>

这指定接收表的area属性将填充Map的area属性,该属性也被用作select中的“description”。