2016-12-06 110 views
0

我在軌中有一個選擇框。在編輯記錄時,我希望先前選定的項目突出顯示。顯示已在軌中選擇的項目選擇下拉列表

<div class="field"> 
    <td><%= f.label :keywords %>(Use Control-Click to select multiple keywords)</td> 
    <td> <%= f.select :keywords, 
         options_for_select(@keywords, 
         :selected => @keywords), 
         {:include_blank => false}, 
         {:multiple => true, :size =>10} %> 

    </div> 

我試過一對夫婦的變化:選擇=>語句以上,但不能得到我想要的東西。

我在找的是當用戶編輯一條記錄時,f.select將會在數據庫中選擇預選。

我在這裏看到一個「Gotcha」,即使這些項目是預先選定的,如果用戶沒有按住Control鍵點擊任何項目,那麼預選項目將會丟失。

--------更新-----------

形式

<%= form_for @bedsheet_line, :html => 
{ :class => 'form-horizontal', multipart: true} do |f| %> 
+0

你可以發表標題表單嗎? (<%form_for ...) – inye

+0

@inye - 我只是將它添加到原始文章。 –

+1

你看到這個http://stackoverflow.com/questions/2196382/rails-select-tag-with-multiple-values-pre-selected? – inye

回答

0

我得到了這個工作。

我改變形式下拉元件

<%= f.select :keywords, 
           options_for_select(@keywords, 
           :selected =>  previous_keywords), 
           {:include_blank => false}, 
           {:multiple => true, :size =>11} %> 

不同的是,所選擇的=>被調用DEF稱爲previous_keywords。

previous_keywords是在我的控制器,看起來像

#--------------------------------- -------以前的關鍵字----------------------------------------- ----- #這是爲抓住已經爲牀單輸入的關鍵字而設計的。這是因爲,如果牀單記錄是 #編輯,那麼如果記錄被編輯,將選擇關鍵字。 # #注意 - eval函數是有風險的。但是,由於這是一個內部應用程序,輸入來自 #選擇框,那麼風險應該是可以接受的。

helper_method :previous_keywords 

    def previous_keywords 



    @current_bedsheet_line = BedsheetLine.find(params[:id])   # grab the current bedsheet line 
    @previous_keywords = @current_bedsheet_line.keywords    # get the keywords for the current bedsheet line 

    keywords = Array.new 

    keywords = eval(@previous_keywords)        # NOTE - the eval function is risky if there is any outside traffic. 

    return keywords 
    end 

注 - eval函數是有風險的。但是該應用程序僅供內部使用,不涉及財務或其他敏感數據,並且饋送給eval的內容來自數據庫,該數據庫來自下拉列表。因此應該減輕風險。

相關問題