将fields参数传递给AMS JSONAPI序列化程序

时间:2016-01-25 20:51:07

标签: ruby-on-rails active-model-serializers

我想设置带有通过URL传递的值的字段。例如,我现在可以这样做:

def index
  authors = Author.all
  render json: authors, include: params[:include], fields: {authors: [:id], posts: [:title]}
end

这就是我想要的方式。它只返回作者的id和帖子的标题。我想做的是这样的事情:

def index
  authors = Author.all
  render json: authors, include: params[:include], fields: params[:fields]
end

当我使用此网址时,它会像以前一样:http://localhost:3000/authors?include=posts&fields[author]=[id]&fields[posts]=[title] 但是,当我这样做时,我会在作者和帖子上的所有字段中获得所有字段。

以下是我的序列化工具供参考:

class AuthorSerializer < ActiveModel::Serializer
  attributes :id, :name
  has_many :posts
end

class PostSerializer < ActiveModel::Serializer
  attributes :id, :title, :text
  belongs_to :author
  has_many :comments
end

1 个答案:

答案 0 :(得分:0)

&#34;字段&#34;部分URL将导致Rails params如下:

{
  "fields" => {
    "author" => "[id]",
    "posts" => "[title]"
  }
}

你可以看到你的属性周围有[],所以你需要删除它们。

其次,如果您希望能够从Post模型中请求多个属性,即在您的网址中传递title,text。您还需要将'title,text'转换为数组,然后将其全部传递给render方法&#34;字段&#34;参数。

(注意:这可能会在未来版本的Active Model Serializers中发生变化,因为JsonApi适配器仍在开发中。)