单一视图凤凰中的多个属性

时间:2018-08-23 06:37:53

标签: serialization elixir phoenix-framework

我想要一个视图,但要根据调用它的json-api呈现不同的属性。例如:索引页面不需要所有属性,因此不需要为其调用所有属性,而显示页面需要所有属性,因此它应该获取所有属性。

我基本上想要这样的东西:

attributes [:id, :name, :email, :website, :inserted_at, :updated_at]

显示和

attributes [:id, :name, :email]

获取索引。

我正在为此使用ja-serializer,因此只想提供解决方案。

PS:我可以有两个具有相应属性的不同视图,但这似乎也没有多大意义。

谢谢。

2 个答案:

答案 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

上面,每个动作都有一个渲染功能头:indexshow。然后,函数主体将构建正确的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