Rails在保存之前转换整数值

时间:2016-12-13 23:04:25

标签: ruby-on-rails before-save

我有一个装有汽车尺寸的数据库 因此用户可以编写类似2.5(如升)或2500(cc)的内容 后来我有一个排序,它应该使用999-9999值进行比较

我提出了下面的功能,但我希望它更灵活。此外,2.5导致2000的结果现在因为看起来像Rails在触发before_save之前转换值

如何正确转换并检测输入中是否有点或逗号?

before_save :covert_engine

private
def covert_engine
    if self.car_engine_size.present?
        if Math.log10(self.car_engine_size).to_i + 1 < 4
            self.car_engine_size = self.car_engine_size * 1000
        end
    end
end

P.S。 self.car_engine_size是数据库中的整数

1 个答案:

答案 0 :(得分:0)

如果您希望用户能够使用不同的输入单位,我会通过让用户选择单位将其显示给用户。

首先创建一个虚拟属性

<?xml version="1.0" encoding="UTF-8"?>
<bean id = "HandlerMapping" class= "org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean name = "/welcome.html" class= "com.FirstProject.hellocontroller.HelloController"/>
<bean id= "viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
    <property name = "prefix" >  </property>
    <value>WEB-INF</value>
    <property name= "suffix">  </property>
    <value>.JSP </value>
</bean>

将属性添加到表单并将其列入控制器白名单

class Car
  attr_accessor :engine_size_unit
end

然后使用the value before the typecast

转换模型中的值
<%= f.number_field :engine_size %>
<%= f.select :engine_size_unit, ['cc', 'l']) %>