使用 Rails 和 JSON API 的参数更简洁
Cleaner way to have params with Rails and JSON API
我有一个 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
来改变参数和 return ActiveRecord 使用的格式,但我想知道他们是否是更好的方法。
我使用 ActiveModelSerializer,但没有看到内置解决方案。
我的问题:我不喜欢这样的事实,因为我必须做一个解析器来反序列化参数并使 {users: [2]}
成为 ActiveRecord 想要的。
最佳做法是什么?
您在此处发布的数据格式由Ember的序列化层决定。您使用 json-api。该格式虽然不适合 Active Record。所以 json-api 不是两者的标准。我使用了 Ember 的层 Ember Data:它与 AR 一起完美地开箱即用
也许有点晚了,但是...
您说得对,JSON API 支持尚未内置到 Rails' AMS 中。但是,有一些 Ruby 库可以让在 ActiveRecord 之上构建 JSON API 兼容的 API 变得非常容易。也许最好的是 JSONAPI::Resources, but there's also Oat and, very soon 一个不同的 AMS 库。
我的问题将由 this pull request 解决。它接受 JSON api 格式并将其转换为 ActiveRecord 的格式。
另一种选择是使用 jsonapi-utils gem,它提供了一种简单的方法来呈现符合 JSON API 的响应:
你会这样写:
class API::UsersController < API::BaseController
def index
jsonapi_render json: User.all
end
end
您将在其官方文档中找到更多示例。希望对你有帮助。
我有一个 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
来改变参数和 return ActiveRecord 使用的格式,但我想知道他们是否是更好的方法。
我使用 ActiveModelSerializer,但没有看到内置解决方案。
我的问题:我不喜欢这样的事实,因为我必须做一个解析器来反序列化参数并使 {users: [2]}
成为 ActiveRecord 想要的。
最佳做法是什么?
您在此处发布的数据格式由Ember的序列化层决定。您使用 json-api。该格式虽然不适合 Active Record。所以 json-api 不是两者的标准。我使用了 Ember 的层 Ember Data:它与 AR 一起完美地开箱即用
也许有点晚了,但是...
您说得对,JSON API 支持尚未内置到 Rails' AMS 中。但是,有一些 Ruby 库可以让在 ActiveRecord 之上构建 JSON API 兼容的 API 变得非常容易。也许最好的是 JSONAPI::Resources, but there's also Oat and, very soon 一个不同的 AMS 库。
我的问题将由 this pull request 解决。它接受 JSON api 格式并将其转换为 ActiveRecord 的格式。
另一种选择是使用 jsonapi-utils gem,它提供了一种简单的方法来呈现符合 JSON API 的响应:
你会这样写:
class API::UsersController < API::BaseController
def index
jsonapi_render json: User.all
end
end
您将在其官方文档中找到更多示例。希望对你有帮助。