Ruby on rails 从select_标记获取所选项目

Ruby on rails 从select_标记获取所选项目,ruby-on-rails,Ruby On Rails,我的rails应用程序中有以下行: <%= select_tag :questionnaire_id, options_for_select(@questionnaires_types, @questionnaires_ids), :multiple => true, :size => 7 %> 与此相反: questionnaire_id"=>["1687", "1688", "1689" ,"1690", "1691", "1724"] i、 我得到的是1

我的rails应用程序中有以下行:

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

questionnaire_id"=>["1687", "1688", "1689" ,"1690", "1691", "1724"]
i、 我得到的是1件而不是6件


有什么建议吗?

我认为一个
集合\u select
看起来不错,但我不能帮你,因为你没有发布任何关于该模型的信息。也许可以试试这个,让它知道这是一个集合:

<%= select_tag "questionnaire_ids[]", options_for_select(@questionnaires_types, @questionnaires_ids), :multiple => true, :size => 7 %>
true,:size=>7%>
或者您可以使用
#split
解析当前收到的字符串

否则,请发布更多关于
问卷调查与此模型之间关联的代码。

根据rails代码:

名称必须以
[]
结尾,以确保收到数组

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
因此,只需将其更改为
问卷调查ID[]


希望这能有所帮助。

好吧,我发现了问题所在,以防万一有人会提出这个问题

这似乎是rails中的一个bug

我当时正在使用的远程表单,这让我有了奇怪的行为。我尝试将表单改为的表单,得到了一个包含6项的数组


Rails,Rails,你什么时候会像.Net一样-(

我知道我可以拆分字符串。但是rails的行为似乎很奇怪。我本来希望得到一个包含项的数组…@NoamB。我相信这就是名称更改所等同的
问卷调查ID[]
告诉表单这现在是一个数组,它假设您需要一个单一响应,这将导致
数组
加入。那么我如何告诉代码假设我需要一个包含独立项的数组?@NoamB。只需添加
[]
最后应该为您将其分开。如果没有,您可以发布生成的html吗。我在问题中编写的代码确实呈现出与您所写的相同的效果。在html中,它变成了问卷调查ID[]。但我仍然得到一个包含1项而不是6项的数组。
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