我知道我可以像这样创建一个单选按钮集合:
# Slim template
= f.association :requirement, as: :radio_buttons
我想让用户使用单选按钮上方的文本字段过滤单选按钮,因此我稍微修改了一下并提出了以下内容:
label for="filter" Filter
input#filter type="text"
= f.association :requirement, as: :radio_buttons
现在我想使用自定义集合输入类型自动创建这些内容:
= f.association :requirement, as: :autocomplete
所以我尝试创建自定义输入,但我没有让它工作。
我创建了以下自定义输入:
# app/inputs/autocomplete_input.rb
class AutocompleteInput < SimpleForm::Inputs::CollectionRadioButtonsInput
# ...
end
这会导致以下错误:
undefined method `collection_autocomplete' for #<SimpleForm::FormBuilder:0x007ffc1d90e9a0>
你的意思是? collection_select
我在SimpleForm的源代码中搜索了一下,然后尝试模仿我为单选按钮集合输入找到的内容:
module SimpleForm
class FormBuilder
map_type :autocomplete, to: SimpleForm::Inputs::AutocompleteInput
end
end
但是这导致了这个相当奇怪的错误:
Circular dependency detected while autoloading constant AutocompleteInput
现在我不知道如何继续。我为简单的字符串和textarea输入创建了几个自定义输入,但是对于集合我不知道如何继续。
答案 0 :(得分:0)
问题来自这一系列的CollectionRadioButtonsInput
@builder.send(:"collection_#{input_type}",
attribute_name, collection, value_method, label_method,
input_options, merged_input_options,
&collection_block_for_nested_boolean_style
)
调用collection_autocomplete方法。
我的解决方案:不要从CollectionRadioButtonsInput扩展。复制其来源并进行修改。不干净但会起作用。