微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 将用户输入转换为整数

所以我有一个表单,用户可以输入一个价格.我试图做一个before_validation来规范化数据,剪切$如果用户放置它.
before_validation do
 unless self.price.blank? then self.price= self.price.to_s.gsub(/\D/,'').to_i end
end

如果用户输入$50这个代码给我0.如果用户输入50 $这个代码给了我50.我认为,因为数据类型是整数,rails在我的before_validation之前运行.to_i并且在$之后剪切所有的东西.如果数据类型是字符串,则同样的代码工作正常.

任何人都有一个解决方案,让我保留整数数据类型?

解决方法

一种方法是覆盖设置价格的模型上的机制,如下所示:
def price=(val)
    write_attribute :price,val.to_s.gsub(/\D/,'').to_i
end

所以当你做@ model.price =无论如何,它将转到这个方法而不是rails的default属性作者.那么你可以转换数字并使用write_attribute进行实际的写作(你必须这样做,因为标准的价格=现在是这个方法!).

我最喜欢这种方法,但是参考另一种方法是在将它分配给模型之前在控制器中.该参数以字符串形式出现,但该模型正将该字符串转换一个数字,因此可以直接使用该参数.这样的东西(只是适应你的控制器代码):

def create
    @model = Model.new(params[:model])
    @model.price = params[:model][:price].gsub(/\D/,'').to_i
    @model.save
end

对于任一解决方案,请删除该before_validation.

原文地址:https://www.jb51.cc/ruby/265888.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐