Пользовательский ввод 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
не соответствует ожиданиям, поэтому он просто не работает.
Действительно ли это возможно? Я не мог найти никакого примера и не могу заставить его работать сам.
Спасибо заранее.
Ответы
Ответ 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 %>