根据docs:
要在模型上包含某些方法调用的结果,请使用 :methods:
user.as_json(methods: :permalink)
# => { "id" => 1, "name" => "Konata Izumi", "age" => 16,
# "created_at" => "2006/08/01", "awesome" => true,
# "permalink" => "1-konata-izumi" }
还有:
选项 include_root_in_json 控制 as_json 的顶级行为。如果为 true,as_json 将发出一个以对象类型命名的根节点。 include_root_in_json 选项的默认值为 false。
user = User.find(1)
user.as_json
# => { "id" => 1, "name" => "Konata Izumi", "age" => 16,
# "created_at" => "2006/08/01", "awesome" => true}
ActiveRecord::Base.include_root_in_json = true
user.as_json
# => { "user" => { "id" => 1, "name" => "Konata Izumi", "age" => 16,
# "created_at" => "2006/08/01", "awesome" => true } }
也可以通过将 :root 选项设置为 true 来实现此行为,如下所示:
user = User.find(1)
user.as_json(root: true)
# => { "user" => { "id" => 1, "name" => "Konata Izumi", "age" => 16,
# "created_at" => "2006/08/01", "awesome" => true } }
所以,大概是这样的:
user.as_json(only: [:id, :email], methods: :display_name, root: true)