simple_form_for пользовательская метка_for

У меня есть выбор, который должен предоставить некоторые десятичные значения (проценты) для бухгалтерского приложения.
Значения равны 10, 20, 22,5. Проблема в том, что хотят отображать первые два значения без десятичной части, третье с ним.

В документации simple_form_for, в разделе Коллекции, говорится о label_methodи я думаю, это решит проблему. Можете ли вы привести пример использования такого метода?

Этого было бы достаточно, но для ясности мой simple_form_for выглядит примерно так:

<%= simple_form_for(@company) do |f| %>

...

<%= f.input :percentage, :collection=>[BigDecimal(10),BigDecimal(20),BigDecimal(22.5,3)]%><br />

...

И вот что я получаю:

1 ответ

Решение

В итоге, label_method позволяет вам определить метод, который вызывается для каждого из элементов в данной коллекции и результат которого используется для отображения элемента

Либо вы даете символ в качестве метода метки, как

label_method: :method_to_be_called

или вы определяете метод на месте, как

label_method: lambda { |value| calculated_label }

В вашем случае я бы определил коллекцию как

[ [BigDecimal(10), 0], [BigDecimal(20), 0], [BigDecimal(22.5, 3), 2] ]

и метка_метода как

label_method: lambda { |value| number_with_precision(value[0], precision: value[1]) }

Вам, вероятно, также нужен метод value_method, возвращающий правильный результат на ваш сервер, что-то вроде

value_method: lambda { |value| value[0] }
Другие вопросы по тегам