我想设置带有通过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
答案 0 :(得分:0)
&#34;字段&#34;部分URL将导致Rails params
如下:
{
"fields" => {
"author" => "[id]",
"posts" => "[title]"
}
}
你可以看到你的属性周围有[],所以你需要删除它们。
其次,如果您希望能够从Post
模型中请求多个属性,即在您的网址中传递title,text
。您还需要将'title,text'
转换为数组,然后将其全部传递给render
方法&#34;字段&#34;参数。
(注意:这可能会在未来版本的Active Model Serializers中发生变化,因为JsonApi适配器仍在开发中。)