gpt4 book ai didi

ruby-on-rails - 在保存到数据库之前处理数据

转载 作者:行者123 更新时间:2023-12-01 07:15:57 26 4
gpt4 key购买 nike

我的数据库中有十进制字段。用户可以输入两种格式的值:逗号或点(11,11 或 11.11)。

但是 MySQL 只允许以“点”格式保存数据,所以我想在使用正则表达式保存之前处理数据,如下所示:

sub(/,/,".")

我如何在 Rails3 中做到这一点?

最佳答案

如果我理解正确,这可以在 Controller 或模型中完成。我可能会在模型中使用 before_save 回调来通过以下方式实现这一点:

class Item < ActiveRecord::Base
before_save :standardise_numbers
...

protected

# Called before this object is saved to the DB
def standardise_numbers
self.number.sub!(",", ".")
end
end
哪里 号码 是您要转换的属性。
我假设您不需要将其转换回逗号表示以显示给用户?如果您这样做,您可能需要查看 Rails 的国际化 API Il8n。它处理这类东西以及更多,所以绝对值得研究。
替代解决方案(编辑)
根据您的反馈,我的上述解决方案不起作用,因为数字已经被转换并且小数部分在传递到模型时丢失了。可以在 Controller 中使用一段类似的代码来拦截和转换 params 哈希本身中的数字:
class PostController < ActionController
before_filter :standardise_numbers, :only => [ :create, :update ]

def create
@post = Post.create(params[:post])
end

protected

# Intercepts the params hash
def standardise_numbers
params[:post][:number].sub!(",", ".")
end
end
这简化了 create 和 update 方法,允许您以与通常相同的方式处理散列。

关于ruby-on-rails - 在保存到数据库之前处理数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6584745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com