Ruby on rails 表单_中浮动的自定义格式
有没有办法控制表单字段中的浮点格式 如果模数为0,我想将浮点格式化为整数,否则按原样显示浮点。我重写了模型访问器以进行此格式化 加载编辑表单时,我希望进行以下转换:Ruby on rails 表单_中浮动的自定义格式,ruby-on-rails,Ruby On Rails,有没有办法控制表单字段中的浮点格式 如果模数为0,我想将浮点格式化为整数,否则按原样显示浮点。我重写了模型访问器以进行此格式化 加载编辑表单时,我希望进行以下转换: stored value | accessor returns | form field shows --------------------------------------------------- 1.0 | 1 | 1 1.5 | 1.5
stored value | accessor returns | form field shows
---------------------------------------------------
1.0 | 1 | 1
1.5 | 1.5 | 1.5
但是,form_for似乎直接访问属性,从而按原样显示浮点
有什么办法可以解决这个问题吗?谢谢。我相信这样做会奏效:
<%= f.text_field :field_attribute, :value => format_method(f.object.field_attribute) %>
format\u方法(f.object.field\u属性)%>
format_method是以这种方式访问模型时,在模型中用于覆盖格式的任何方法。您可以覆盖属性读取器,如下所示:
def myfloat
if @myfloat == @myfloat.to_i
@myfloat.to_i
else
@myfloat
end
end
现在,返回的值已针对您的表单正确格式化,并且在您的应用程序中仍然可用。的解决方案将在您使用获取“原始”值时起作用:
和往常一样,在比较浮点和整数时,您需要小心舍入。您可以覆盖respond\u to?在模型中,在调用\u类型\u转换之前停止值\u
def respond_to?(*args)
if args.first.to_s == "my_float_before_type_cast"
false
else
super
end
end
然后你还需要:
def my_float
raw = read_attribute(:my_float)
if raw == raw.to_i
raw.to_i
else
raw
end
end
使用
在的表单中,将不会像前面提到的那样工作。尝试了多次。IMHO这是一个更严重的钢轨设计问题。一般来说,您并没有从视图直接访问模型的权限 是的,我的模型里已经有类似的东西了。但我的问题是如何获得表单_以使用重写的属性读取器?它似乎使用了read_属性或其他什么。我不认为使用了read_属性。根据中的“覆盖默认访问器”,当需要特殊行为时,应该使用我描述的方法。在您的情况下似乎是这样。我希望这能起作用,但text_field helper方法直接获取值(即它不调用访问器)。我考虑过在早期这样做,因为它在视图层中保留了格式逻辑,但我认为最好是将格式放入模型中,这样我就不必在视图中复制它了……但我想这就是partials的用途。我想我会采用这个解决方案。谢谢
def my_float
raw = read_attribute(:my_float)
if raw == raw.to_i
raw.to_i
else
raw
end
end
def my_float
raw = read_attribute(:my_float)
if raw == raw.to_i
raw.to_i
else
raw
end
end