一、需求
將一個表中的字段作為下拉菜單選項,顯示在頁面中
例如:
這里我想把lessons表中的name字段中的值作為下拉選項,選中某個選項后,然后存入到另外一個contracts表的course字段中
二、效果圖

image
三、實現(xiàn)方案
(一)使用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檢查網(wǎng)頁,可以看到: lesson表中的id字段中的內(nèi)容被解析為下拉菜單的value,lessons表中的name字段中內(nèi)容被解析為下拉選項
image - {}是空的hash,將作為下拉菜單的默認選項,因此默認情況顯示下拉菜單中的內(nèi)容為空
-
pluck查詢出的內(nèi)容是數(shù)組,當將一個字段作為參數(shù),查詢出的是一個一維度數(shù)組,當將兩個及兩個以上的字段作為參數(shù),查詢出來的是二維數(shù)組,如圖:
image
(三)使用select_tag
<%= select_tag :learn_fare, options_for_select(Lesson.pluck(:price,:id).unshift(nil)),required: true %>
四、補充:
二維數(shù)組中只有其中的每個一維數(shù)組的元素為兩個,才能通過to_h的方法可以轉(zhuǎn)換成hash,否則會提示參數(shù)錯誤

image

