一、需求
将一个表中的字段作为下拉菜单选项,显示在页面中
例如:
这里我想把lessons表中的name字段中的值作为下拉选项,选中某个选项后,然后存入到另外一个contracts表的course字段中
二、效果图
三、实现方案
(一)使用select_collection
<%= collection_select(:course,:id,Lesson.all,:id,:name,{:prompt => '请选择'},required: true) %>
其中:
-
:prompt => '请选择'
将选项的默认选项设为"请选择" -
required:true
用来前台验证,如果不进行选择,则提示用户进行选择
(二)使用f.select
<%= f.select :course,Lesson.pluck(:id,:name),{},require: true %>
其中:
-
通过chrome检查网页,可以看到: lesson表中的id字段中的内容被解析为下拉菜单的value,lessons表中的name字段中内容被解析为下拉选项
- {}是空的hash,将作为下拉菜单的默认选项,因此默认情况显示下拉菜单中的内容为空
-
pluck查询出的内容是数组,当将一个字段作为参数,查询出的是一个一维度数组,当将两个及两个以上的字段作为参数,查询出来的是二维数组,如图:
(三)使用select_tag
<%= select_tag :learn_fare, options_for_select(Lesson.pluck(:price,:id).unshift(nil)),required: true %>
四、补充:
二维数组中只有其中的每个一维数组的元素为两个,才能通过to_h的方法可以转换成hash,否则会提示参数错误