我有表单域当用户在输入:Rails方式:在设置模型之前格式化值?
- 百分比:
50.5%
- 钱:
$144.99
- 日期:
Wednesday, Jan 12th, 2010
...
的percent
和money
类型属性保存为decimal
字段s与ActiveRecord,并且日期是datetime
或date
字段。
它很容易转换格式之间的JavaScript,你理论上可以将它们转换为activerecord可接受的格式onsubmit
,但这不是一个体面的解决方案。
我想重写ActiveRecord中的访问器,所以当它们被设置时,它将它们从任何字符串转换为适当的格式,但这不是最好的。
我不想什么是必须通过一个独立的处理器对象来运行它们,这就需要像这样的控制器:
def create
# params == {:product => {:price => "$144.99", :date => "Wednesday, Jan 12, 2011", :percent => "12.9%"}}
formatted_params = Product.format_params(params[:product])
# format_params == {:product => {:price => 144.99, :date => Wed, 12 Jan 2011, :percent => 12.90}}
@product = Product.new(format_params)
@product.save
# ...
end
我想它是完全透明的。 ActiveRecord中的钩子在哪里,所以我可以这样做Rails Way?
更新
我只是做这个现在:https://gist.github.com/727494
class Product < ActiveRecord::Base
format :price, :except => /\$/
end
product = Product.new(:price => "$199.99")
product.price #=> #<BigDecimal:10b001ef8,'0.19999E3',18(18)>
有一个名为“attribute_normalizer”如果你在你的应用程序重新编辑该值,你需要让这个过程双向例如,无论过程中,您在执行哪些做这项工作 – 2012-11-29 22:38:56