パラメータのデフォルトのデシリアライゼーションをモデルオブジェクトにオーバーライドする方法は? つまり、Rails にキャメル ケースの JSON をスネーク ケースのデータベースで理解させるにはどうすればよいでしょうか。
例: フィールドを持つ paramsFoo
オブジェクトを受け取り、実際にはデータベース フィールドであることをモデルに理解さfooBar
せたいとします。Foo
fooBar
foo_bar
"Foo": {
"fooBar": "hello" /* fooBar is database field foo_bar */
}
class Foo < ActiveRecord::Base
attr_accessible :foo_bar
end
class FoosController < ApplicationController
def new
@foo = Foo.new(params[:foo])
end
Foo.new(params[:foo])
params[:foo]
を含むと仮定しますfoo_bar
。代わりparams[:foo]
に含まれていますfooBar
(私の場合params
はJSONデータが含まれています)。
モデルがオーバーライドできるのと同じ方法で、このケースをきれいに処理したいと思いますas_json
。
class Foo < ActiveRecord::Base
attr_accessible :foo_bar, :another_field
def as_json(options = nil)
{
fooBar: foo_bar,
anotherField: another_field
}
end
end
from_json
ActiveModel 内にメソッドがありますが、実行時に呼び出されませんFoo.new(params[:foo])
。
initialize
モデルオブジェクトからのオーバーライドはひどい考えだと何度か読んだことがあります。