从select_tag获取所选项目

时间:2014-09-02 16:47:26

标签: ruby-on-rails

我在我的rails app中有这一行:

<%= 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件。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

我认为collection_select看起来很不错,但由于你没有发布关于该模型的任何内容,我无法帮助。也许试试这个,以便它知道它是一个集合:

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

或者您可以使用#split解析当前收到的字符串。

否则发布更多关于Questionnaire与此模型之间关联的代码。

答案 1 :(得分: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[]

即可

希望有所帮助。

答案 2 :(得分:0)

好吧,如果有人会遇到这个问题,我发现了问题。

这似乎是rails中的一个错误。

我正在使用 remote_form_for ,这给了我奇怪的行为。我尝试将表单更改为 form_for ,然后我得到了一个包含6个项目的数组。

Rails,Rails,你什么时候会像.Net? : - (