2015-10-19 55 views
1

我的應用程序中的select_options標記生成一個參數列表,它始終包含一個空字符串。 當使用參數從數據庫中獲取數據時,會導致錯誤。具有multipe的collection_select true使用空字符串發送參數

的組成部分是這樣的:

<%= f.label :text %><br> 
<%= f.text_area :text, cols: 80, rows: 15, class: 'form-control' %> 


<%= f.label 'Category:' %> 

<%= f.collection_select(:categories, Category.all, :id, :cat_name, {:selected => Category.first.id}, {:multiple => true}) %> 

輸出(HTML)是這樣的:

<select multiple="multiple" name="article[categories][]" id="article_categories"> 
    <input name="article[categories][]" value="" type="hidden"> 
    <option selected="selected" value="1">default</option> 
    <option value="2">politics</option> 
</select> 

這看起來完美的我。但提交時(在選擇了兩個選項)中的參數如下所示:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"kvYo6rb+lswUuJMHpbb+hH3YFjHU25/ESN7vvLLdlVn1TOSgzyiMsXkrJbiWIhuuO4UvNLQ3jU7uTw0zneVTUA==", 
"article"=>{"title"=>"test category", "text"=>"Na mal sehen...\r\nIses drin?", 
"categories"=>["", "1", "2"], "published"=>"0"}, "commit"=>"Save changes", "id"=>"76"} 

類別部分包含:類別「=> [」」,‘1’,‘2’] 第一個是一個空串,我不能找出如何擺脫它。

感謝您的幫助提前!

回答

3

Rails的生成具有相同的名稱,選擇欄的隱藏字段,所以如果沒有選項被選擇值仍然被提交,你可以通過爲collection_select指定include_hidden: false來防止Rails添加隱藏字段。

下面是從說明(link)的摘錄:

爲了防止這種輔助產生的輔助隱藏字段 每多個選擇之前。隱藏字段與多個 選擇和空白值具有相同的名稱。

注意:客戶端只發送隱藏字段(表示取消選擇多個選擇框的 )或兩個字段。這意味着 結果數組總是包含一個空白字符串。

如果你不想幫助者生成這個隱藏字段,你可以指定include_hidden:false選項。

+0

謝謝!這是解決方案:-) – kaliyuga

0

嚮導的解決方案有一些負面影響:一旦我們設置,我們不能清空字段。 我發現,我們可以配置強大的參數就像下面來解決這個問題:

params.require(:article).permit(categories: []); 

我發現permit(:categories)不行permit(categories: [])工作

相關問題