代码之家  ›  专栏  ›  技术社区  ›  AgostinoX

simple_form_for自定义标签for

  •  0
  • AgostinoX  · 技术社区  · 11 年前

    我有一个选择,必须为会计应用程序提供一些十进制值(百分比)。
    这些值类似于10、20、22.5。 问题是要显示 前两个值没有小数部分,第三个值有小数部分。

    在simple_form_for中 documentation ,在“集合”部分中,它讨论了 label_method ,我想这会解决问题。 你能提供一个使用这种方法的例子吗?

    这就足够了,但为了清楚起见,我的simple_form_for是这样的:

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

    下面是我得到的:

    enter image description here

    1 回复  |  直到 11 年前
        1
  •  1
  •   Danny    11 年前

    概括而言,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_方法为

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

    您可能还需要一个value_method,将正确的结果返回给服务器,比如

    value_method: lambda { |value| value[0] }