2

我有一个用于客户端的 Ember 应用程序和用于服务器端的 Rails。我决定使用 json-api 因为我认为它是两者的标准。当我保存模型时,Ember 会发送这种数据:

{ "data" =>
  { "relationships" =>
    { "users" =>
      { "data" =>
        [ { "type" => "users", "id" => "2" } ]
      }
    },
    "type" => "trails"
  },
  "controller" => "api/v1/trails",
  "action" => "create"
}

在我的控制器中,我有这个方法:

  def create
    render json: Trail.create(trail_params)
  end

我显然可以做一个trail_params更改参数并返回 ActiveRecord 使用的格式的方法,但我想知道它们是否是更好的方法。

我使用 ActiveModelSerializer,但没有看到内置解决方案。

我的问题:我不喜欢这样的事实,因为我必须做一个解析器来反序列化参数并拥有{users: [2]}ActiveRecord 想要的。

最佳做法是什么?

4

4 回答 4

2

可能有点晚了,但是...

没错,Rails 的 AMS 中还没有内置 JSON API 支持。但是,有一些 Ruby 库可以很容易地在 ActiveRecord 之上构建符合 JSON API 的 API。也许最好的是JSONAPI::Resources,但也有Oat而且很快就会出现一个不同的 AMS 库。

于 2015-08-30T02:30:39.687 回答
1

您在此处发布的数据格式由 Ember 的序列化层确定。您使用 json-api。该格式虽然不适合 Active Record。所以 json-api 不是两者的标准。我使用了 Ember 的层Ember Data:它与 AR 完美开箱即用

于 2015-08-18T05:04:10.187 回答
0

这个拉取请求将解决我的问题。它接受 JSON api 格式并将其转换为 ActiveRecord 的格式。

于 2015-09-08T09:54:08.603 回答
0

另一种选择是使用jsonapi-utils gem,它提供了一种简单的方式来呈现 JSON API 兼容的响应:

你会写这样的东西:

class API::UsersController < API::BaseController
  def index
    jsonapi_render json: User.all
  end
end

您将在其官方文档中找到更多示例。希望能帮助到你。

于 2016-03-11T16:20:48.820 回答