你如何使 Rails 多选下拉工作

Chr*_*dla 5 ruby-on-rails

我正在尝试使用搜索参数对话框制作多选下拉菜单。我可以进行下拉多选,但似乎无法获取/传递结果数据。(编辑/新信息将以斜体显​​示)

我相信问题的根源在于我需要更改控制器中的 permit 部分以反映我正在传递哈希/数组。如果我查看结果记录,我设置为多选的 2 个字段显示为 nil。但是,如果我强制出现错误,rails 显示的参数会显示正确的选择。因此,我认为问题可能出在许可部分。

那看起来像

 *def search_params
      params.require(:search).permit(:document_title,
                                     :summary,
                                     :owner,
                                     :category,
                                     :file_name,
                                     :doc_to_email,
                                     :categories_attributes => [:name])
    end*
Run Code Online (Sandbox Code Playgroud)

我添加了 :categories_attributes => [:name] 以尝试让控制器允许散列,但这不起作用。

选择字段是

 <%= f.select :category[], options_for_select(@categories.sort), {:include_blank => true}, {:multiple => true, :size =>10}  %>
Run Code Online (Sandbox Code Playgroud)

但这给了我

.erb 其中第 41 行提出:

参数数量错误(0 表示 1..2)模板包含的痕迹:app/views/searches/new.html.erb

我以为我必须使用 [] 将类别设置为数组,但显然我遗漏了一些东西。

类别是搜索表中的字符串字段。

Mát*_*osi 5

[]字段名称后面不需要括号,因为 Rails 会自动添加这些括号。

请参阅此处的示例: http ://apidock.com/rails/ActionView/Helpers/FormTagHelper/select_tag

select_tag "colors", "<option>Red</option><option>Green</option><option>Blue</option>".html_safe, multiple: true
# => <select id="colors" multiple="multiple" name="colors[]"><option>Red</option>
#    <option>Green</option><option>Blue</option></select>
Run Code Online (Sandbox Code Playgroud)

params[:search][:category]在您的情况下,选定的值将在提交表单后作为数组提供。

如果您使用强参数,还要确保您:category => []在许可列表中。