将一个表中的字段作为选项制作下拉菜单并进行前台验证

一、需求

将一个表中的字段作为下拉菜单选项,显示在页面中
例如:
这里我想把lessons表中的name字段中的值作为下拉选项,选中某个选项后,然后存入到另外一个contracts表的course字段中

二、效果图

image

三、实现方案

(一)使用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字段中内容被解析为下拉选项


    image
  • {}是空的hash,将作为下拉菜单的默认选项,因此默认情况显示下拉菜单中的内容为空
  • pluck查询出的内容是数组,当将一个字段作为参数,查询出的是一个一维度数组,当将两个及两个以上的字段作为参数,查询出来的是二维数组,如图:


    image

(三)使用select_tag

<%= select_tag :learn_fare, options_for_select(Lesson.pluck(:price,:id).unshift(nil)),required: true %>

四、补充:

二维数组中只有其中的每个一维数组的元素为两个,才能通过to_h的方法可以转换成hash,否则会提示参数错误


image

五、参考资料

1.collection_select

你可能感兴趣的:(将一个表中的字段作为选项制作下拉菜单并进行前台验证)