【问题标题】:SimpleForm: create custom association collection input typeSimpleForm:创建自定义关联集合输入类型
【发布时间】:2017-12-01 16:42:27
【问题描述】:

我知道我可以像这样创建一组单选按钮:

# 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>

你的意思是?收藏选择

我在 SimpleForm 的源代码中搜索了一下,然后尝试模仿我为单选按钮集合输入找到的内容:

module SimpleForm
  class FormBuilder
    map_type :autocomplete, to: SimpleForm::Inputs::AutocompleteInput
  end
end

但这导致了这个相当奇怪的错误:

Circular dependency detected while autoloading constant AutocompleteInput

现在我不知道该怎么做。我已经为简单的字符串和文本区域输入创建了几个自定义输入,但是对于集合我不知道如何继续。

【问题讨论】:

  • 我不知道这是否会有所帮助,但GitHub page 上似乎有一个未解决的问题可以处理这个确切的问题。也许你可以从那里提取你想要的东西?
  • 您想知道如何创建自定义输入的问题,还是想知道如何让自动完成功能正常工作?因为您选择的路径似乎不是您要解决的问题的正确解决方案。
  • 我也遇到了同样的问题。

标签: ruby-on-rails custom-controls simple-form


【解决方案1】:

问题出在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 扩展。复制其源代码并进行修改。不干净,但会工作。

【讨论】:

    猜你喜欢
    • 2011-07-30
    • 2013-01-22
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    • 2020-07-31
    相关资源
    最近更新 更多