パラメータのデフォルトのデシリアライゼーションをモデルオブジェクトにオーバーライドする方法は? つまり、Rails にキャメル ケースの JSON をスネーク ケースのデータベースで理解させるにはどうすればよいでしょうか。
例: フィールドを持つ paramsFooオブジェクトを受け取り、実際にはデータベース フィールドであることをモデルに理解さfooBarせたいとします。FoofooBarfoo_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_jsonActiveModel 内にメソッドがありますが、実行時に呼び出されませんFoo.new(params[:foo])。
initializeモデルオブジェクトからのオーバーライドはひどい考えだと何度か読んだことがあります。