与自定义包装simple_form自定义输入(simple_form custom input wi

2019-08-17 13:44发布

我试图让货币自定义输入我的应用程序。 我的引导和包装等(我认为它带有simple_form或引导宝石......),那么,我可以这样做:

<%= f.input :cost, wrapper => :append do %>
      <%= content_tag :span, "$", class: "add-on" %>
      <%= f.number_field :cost %>
<% end %>

它按预期工作而已。 问题是:我需要在很多地方同样的事情,我不希望复制/粘贴各地。

所以,我决定创建一个自定义输入。

到现在为止,我得到了下面的代码:

class CurrencyInput < SimpleForm::Inputs::Base

  def input
    input_html_classes.unshift("string currency")
    input_html_options[:type] ||= input_type if html5?

    @builder.input attribute_name, :wrapper => :append do |b|
      # content_tag(:span, "$", class: "add-on")
      b.text_field(attribute_name, input_html_options)
    end
  end
end

但我得到了一些错误。 貌似b不来了作为预期,因此,它只是不工作。

难道真的有可能做到这一点? 我便无法找到任何实例,不能让它通过自己的工作。

提前致谢。

Answer 1:

That block variable is not existent, your input method have to be like this:

class CurrencyInput < SimpleForm::Inputs::Base

  def input
    input_html_classes.unshift("string currency")
    input_html_options[:type] ||= input_type if html5?

    template.content_tag(:span, "$", class: "add-on") +
      @builder.text_field(attribute_name, input_html_options)
  end
end

Now you can register a default wrapper to this custom input in you Simple Form initializer:

config.wrapper_mappings = { :currency => :append }

An you can use like this:

<%= f.input :cost, :as => :currency %>


文章来源: simple_form custom input with custom wrapper