13

アプリで通貨のカスタム入力を作成しようとしています。私はそれらのブートストラップラッパーなどを持っていたので(simple_formまたはbootstrap 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ので、うまくいきません。

これを行うことは本当に可能ですか?例が見つからず、自分で機能させることはできません。

前もって感謝します。

4

1 に答える 1

20

そのブロック変数は存在しません。入力メソッドは次のようにする必要があります。

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 %>
于 2013-03-14T13:03:51.337 に答える