Подтвердить что ты не робот

Пользовательский ввод simple_form с пользовательской оболочкой

Я пытаюсь сделать пользовательский ввод для валюты в моем приложении. У меня были те обертки для бутстрапов и т.д. (Я думаю, что он поставляется с simple_form или с бутстрапом gem...), поэтому я мог бы сделать что-то вроде:

<%= 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 не соответствует ожиданиям, поэтому он просто не работает.

Действительно ли это возможно? Я не мог найти никакого примера и не могу заставить его работать сам.

Спасибо заранее.

4b9b3361

Ответ 1

Эта блокирующая переменная не существует, ваш метод ввода должен быть таким:

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

Теперь вы можете зарегистрировать обертку по умолчанию для этого пользовательского ввода в вашем инициализаторе Simple Form:

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

Вы можете использовать следующее:

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