2014-09-02 33 views
0

選擇的項目我有這條線在我的Rails應用程序:得到來自select_tag

<%= select_tag :questionnaire_id, 
options_for_select(@questionnaires_types, @questionnaires_ids), 
:multiple => true, :size => 7 %> 

工作正常。

,但是當我嘗試使用被選中的多個值,我得到這樣的:

questionnaire_id"=>["1687,1688,1689,1690,1691,1724"] 

,而不是這樣的:

questionnaire_id"=>["1687", "1688", "1689" ,"1690", "1691", "1724"] 

即我獲得1項,而不是6個項目。

有什麼建議嗎?

回答

0

好,以防萬一有人來這個問題,我發現這個問題。

它似乎是一個軌道中的錯誤。

我正在使用remote_form_for,這給了我奇怪的行爲。我嘗試將表單改爲form_for,而我有一個包含6個項目的數組。

Rails,Rails,你什麼時候會喜歡.Net? :-(

0

我想collection_select看起來不錯,但我不能與幫助,因爲你沒有張貼關於模型的東西。也許試試這個,以便它知道它是一個集合:

<%= select_tag "questionnaire_ids[]", options_for_select(@questionnaires_types, @questionnaires_ids), :multiple => true, :size => 7 %> 

或者你可以只分析你目前使用#split接收字符串。

否則張貼有關Questionnaire和什麼都這種模式之間的聯繫更多的代碼。

+0

我知道我可以拆分字符串,但軌道的行爲似乎很奇怪,我本來希望能得到一個包含項目的數組... – 2014-09-02 17:05:38

+0

@NoamB。我相信這就是名稱改變等同於'questionnaire_ids []'告訴表單現在這是一個數組,它假設你想要一個單一的響應,這將導致'Array'加入。 – engineersmnky 2014-09-02 18:07:57

+0

那麼,我該如何告訴代碼假設我想要一個包含單獨項目的數組? – 2014-09-03 10:44:17

0

根據Rails代碼:https://github.com/rails/rails/blob/41231ef6c6c6a6e546b69add28f04aafb9e0e952/actionview/lib/action_view/helpers/form_tag_helper.rb#L134

名稱必須以[]結束時確保您收到的數組。

def select_tag(name, option_tags = nil, options = {}) 
    option_tags ||= "" 
    html_name = (options[:multiple] == true && !name.to_s.ends_with?("[]")) ? "#{name}[]" : name 

    if options.delete(:include_blank) 
    option_tags = content_tag(:option, '', :value => '').safe_concat(option_tags) 
    end 

    if prompt = options.delete(:prompt) 
    option_tags = content_tag(:option, prompt, :value => '').safe_concat(option_tags) 
    end 

    content_tag :select, option_tags, { "name" => html_name, "id" => sanitize_to_id(name) }.update(options.stringify_keys) 
end 

所以只是將其更改爲questionnaire_ids[]

希望有所幫助。

+0

的代碼。在html變成了questionnaire_ids []。但是我仍然得到一個數組,其中有1個項目而不是6個。 – 2014-09-03 10:43:45