gpt4 book ai didi

ruby - simple_form - 无法生成组合选择输入

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:47 27 4
gpt4 key购买 nike

我有很多控件的复杂表单,由于其灵 active ,我目前正在使用 simple_form gem。但是当我想做一些更复杂的事情时,我遇到了几个目前对我来说还很模糊的问题。我想介绍组合集合输入,它将呈现 optgroups 和单个非分组选择。我想要实现的生成的 html 应如下所示:

<select name="select" multiple="multiple">
<option value="1">Milk</option>
<optgroup label="Soda">
<option value="2">Cola</option>
<option value="3">Fanta</option>
</optgroup>
</select>

我尝试创建自定义输入类,但一直停留在 input 方法的实现细节上,我根本找不到如何生成正确的输出。

更新

目前自定义输入的快速和肮脏的实现看起来像这样,但我不认为放弃 simple_form 给我的所有选项是个好主意。

class CombinedMultiselectInput < SimpleForm::Inputs::CollectionSelectInput
include ActionView::Helpers::FormTagHelper
include ActionView::Helpers::FormOptionsHelper

def input
out = ActiveSupport::SafeBuffer.new
option_tags = ungrouped_options.safe_concat(grouped_options)
out << select_tag(options[:name], option_tags, class: ['select', 'form-control'])
out
end

private

def ungrouped_options
# this can be retrieved from general collection like collection[:ungrouped]
collection = [["Foo", 2], ["Bar", 3]]
options_for_select(collection)
end

def grouped_options
# and this using collection[:grouped]
collection = [["Group", [["Foobar", 4]]]]
grouped_options_for_select(collection)
end
end

最佳答案

使用您当前的设计,您可以像这样组合 options_for_selectoption_groups_from_collection_for_select 方法。

def ungrouped_options
[["Foo", 2], ["Bar", 3]]
end

def grouped_options
[["Group", [["Foobar", 4]]]]
end

def your_hash
{"ungrouped" => ungrouped_options, "grouped" => grouped_options}
end

那么在您看来,这样的事情应该可行:

<%= content_tag(:select,nil,{multiple: true,name: "select"}) do
<%= your_hash.each do |k,v| %>
<% if k == "ungrouped" %>
<%= options_for_select(v) %>
<% else %>
#this works because:
# last will be the collection of children for a member
# first will be the group name
# last on the child will be the value method
# first on the child will be the text displayed
<%= option_groups_from_collection_for_select(v, :last, :first, :last, :first) %>
<% end %>
<% end %>
<% end %>

这将创建以下内容:

<select name=\"select\" multiple=\"true\">
<option value=\"2\">Foo</option>
<option value=\"3\">Bar</option>
<optgroup label=\"Group\">
<option value=\"4\">Foobar</option>
</optgroup>
</select>

显然,这已被简化以展示如何做到这一点,但希望这能为您指明正确的方向。

虽然我还没有测试过,但您也应该能够将其包装为 simple_form。

<%= f.input :some_attribute do %>
<%= f.select :some_attribute do %>
<%= your_hash.each do |k,v| %>
<% if k == "ungrouped" %>
<%= options_for_select(v) %>
<% else %>
<%= option_groups_from_collection_for_select(v, :last, :first, :last, :first) %>
<% end %>
<% end %>
<% end %>
<% end %>

关于ruby - simple_form - 无法生成组合选择输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29030663/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com