我想要一个视图,但要根据调用它的json-api呈现不同的属性。例如:索引页面不需要所有属性,因此不需要为其调用所有属性,而显示页面需要所有属性,因此它应该获取所有属性。
我基本上想要这样的东西:
attributes [:id, :name, :email, :website, :inserted_at, :updated_at]
显示和
attributes [:id, :name, :email]
获取索引。
我正在为此使用ja-serializer,因此只想提供解决方案。
PS:我可以有两个具有相应属性的不同视图,但这似乎也没有多大意义。
谢谢。
答案 0 :(得分:0)
如果您发布一些代码,将会有所帮助。但是您可以在视图中执行此操作。您可以为每个控制器操作定义单独的render
函数头。
例如:
def render("index.json", %{store: store}) do
%{data: %{store: %{id: store.sap_id, name: store.name}}}
end
def render("show.json", %{store: store}) do
%{data: %{store: %{id: store.sap_id, name: store.name, other: store.other}}}
end
上面,每个动作都有一个渲染功能头:index
和show
。然后,函数主体将构建正确的JSON响应。您可以使用这种方法来自定义要返回的属性。
答案 1 :(得分:0)
render方法调用中有一个可选参数。我们可以在“字段”中指定字段,并保持视图不变。
def index(conn, params) do
render("index.json-api", data: data, opts: [fields: %{"table_name"=> "fields,in,csv,style"}])
end
有关更多信息,请参阅 https://hexdocs.pm/ja_serializer/JaSerializer.DSL.html