Rails 關於 options_from_collection_for_select 如何指定預設值的欄位啊? 求賜教

idarfan · 2012年09月22日 · 最后由 sunnyhust2005 回复于 2016年10月01日 · 3299 次阅读

Rails 程式在撰寫下拉式選項時:

有一個 id 編號為 9 內容為 "none" 的記錄。

想要把預設指到那兒去,當使用者未留意而按下送出時,至少會送出 none 的記錄。底下的寫法並未能成功做到這樣的功能。有誰有碰到類似的問題?

<div class="field1">
    <%= f.label :adults_license, "5.請輸入認證班課程類別" %><br />
    <%= f.select(:adults_license, options_from_collection_for_select(@adults_licenses,:reason_desc, 'reason_desc', 9), {:prompt => '請選擇課程類別'}) %>  
</div>

上面的程式不能運作啊,怎麼都一直指向 1 去。

options_from_collection_for_select(collection, value_method, text_method, selected = nil) 看你写法是没错,但是 value_method 和 text_method 都写的 reason_desc,value_method 是不是应该是 id?

感謝您再次的幫忙,一時不察就沒注意 api 的說明,一直把第二個參數當做要我要下拉顯示的欄位訊息. 改成這樣就成了。

<div class="field1">
   <%= f.label :adults_license, "5.請輸入認證班課程類別" %><br />
   <%= f.select(:adults_license, options_from_collection_for_select(@adults_licenses, 'id', 'reason_desc', @adults_licenses.last.id),{:prompt => '請選擇課程類別'}) %>  
 </div>

不過這倒出現了另一個麻煩,因為我並未建立與主表的關聯。這樣的寫法會導致被存入在 :adults_license 這個字段的資料..原本是初級初試 變成 1 => 相對於初級初試課程。

若改成如下

<div class="field1">
   <%= f.label :adults_license, "5.請輸入認證班課程類別" %><br />
   <%= f.select(:adults_license, options_from_collection_for_select(@adults_licenses, 'reason_desc', 'reason_desc', @adults_licenses.last.id),{:prompt => '請選擇課程類別'}) %>  
 </div>

則存入到:adults_license 這個字段的資料會是 GEPT, 但這會導致另一個問題. 那就是要指向到最後一個 id 的設置無法運作..只會出現 "請選擇課程類別" 了..而不會是預設的 none

這樣的問題不知有何解法?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号