2012-09-15 22 views
0

我有一個工作表單(不綁定到模型,因此使用form_tag),其中包含一個選擇框。基於GET參數在Ruby on Rails中使用select_tag的選定值

相關的代碼如下:

select_tag 'language', "<option value='ar' selected>Arabic</option> 
<option value='bg'>Bulgarian</option><option value='ca'>Catalan</option> 
<option value='zh-CHS'>Chinese (Simplified)</option> 
<option value='zh-CHT'>Chinese (Traditional)</option> 
... 
<option value='tr'>Turkish</option><option value='uk'>Ukrainian</option> 
<option value='vi'>Vietnamese</option>".html_safe 

正如你會發現,阿拉伯語是默認選項,並有大約35種語言在列表中。

當用戶選擇他們的語言時,我單獨存儲該值(通過提交表單時的GET),但我希望表單在下次遇到表單時自動選擇用戶選擇的語言。換句話說:

  1. 「默認」選項是阿拉伯語;
  2. 用戶選擇法語作爲他們的語言;
  3. 下次遇到表單時(例如,當他們將 返回到相關頁面)時,會選擇法語而不是阿拉伯語。

一種方式我認爲實現這一目標是通過case...when電話,其中selected屬性添加到相關的選項,但35周以上的語言列表,這很可能會變得有點繁瑣,和我確信有一個更好/更整潔的方式。

任何想法?我想options_for_select是解決方案,但我不知道這將如何進入上述代碼?

回答

1

哈!通常,我在發佈此消息後的10分鐘內設法解決了此問題。您可以使用options_for_select,並解決我的問題(與誰碰巧看到這樣類似的查詢人)如下:

select_tag 'language', 
options_for_select([ 
["Arabic", "ar"], 
["Bulgarian", "br"], 
["Catalan", "ca"], 
.... 
], params[:get_language]) 

如果params[:get_language]沒有設置,也就是說,已經沒有以前表單提交,那麼我認爲沒有選擇任何選項(或換句話說,列表中的第一個選項是默認選擇),但我沒有測試過(我有更多的代碼在其他地方檢查是否這表格第一次被呼叫)。

對不起,浪費你的時間,鄉親們!

相關問題