Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Rails和JSON API创建参数的更简洁方法_Ruby On Rails_Ruby_Json_Ember.js_Json Api - Fatal编程技术网

Ruby on rails 使用Rails和JSON API创建参数的更简洁方法

Ruby on rails 使用Rails和JSON API创建参数的更简洁方法,ruby-on-rails,ruby,json,ember.js,json-api,Ruby On Rails,Ruby,Json,Ember.js,Json Api,我有一个用于客户端的Ember应用程序和一个用于服务器端的Rails应用程序。我决定使用json api,因为我认为它是两者的标准。当我保存模型时,Ember会发送此类数据: { "data" => { "relationships" => { "users" => { "data" => [ { "type" => "users", "id" => "2" } ] } }, "type" =

我有一个用于客户端的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,但没有看到内置的解决方案

我的问题:我不喜欢这样的事实,因为我必须使用解析器来反序列化参数,并按照ActiveRecord的要求使用
{users:[2]}


最佳做法是什么?

您在此处发布的数据格式由Ember的序列化层决定。您可以使用json api。但该格式不适合活动记录。所以json api并不是这两个方面的标准。我使用了Ember's layer:它与AR完美结合,开箱即用

可能有点晚,但是


您是对的,JSON API支持还没有内置到Rails的AMS中。然而,有一些Ruby库使得在ActiveRecord之上构建符合JSON API的API变得非常容易。也许最好的是,但是还有一个不同的AMS库。

我的问题将由解决。它接受JSON api格式并将其转换为ActiveRecord的格式。

另一个选项是使用gem,它提供了一种简单的方式来呈现符合JSON api的响应:

你可以这样写:

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

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

您的问题不清楚。你想解决什么问题?你说你想要一种“更干净的方式”——你现有的实现中哪一部分是“不干净的”?你的方法是好的和干净的。@Jordan我编辑了我的问题。我正在寻找一种获得ActiveRecord格式的方法。我使用带有JSONAPIAdapter的Ember数据。如“在Ember Data 2.0中,默认适配器将是JSONAPIAdapter”。我发现结社比较容易。