我正在尝试使用生成的html以及json api响应创建Phoenix应用程序。这是我到目前为止所做的:
mix phoenix.gen.html User users name:string email:string
mix phoenix.gen.json Api.User users --no-model
然后我在"别名MyApp.Api.User"中更改了UserController中的别名。 to"别名Api.User"。它的工作原理! ..大多数!
这是我在http响应中得到的:
{"data":[{"id":1},{"id":2}]}
我想解决的问题是 - 当我在Api上拨打GET时,我只会得到一个id列表;没有返回所有其他有用的字段。 IO.inspect告诉我控制器正在返回所有内容。所以它必须是过滤掉字段的视图。
但是,我对Elixir / Phoenix的理解不足。这就是我所看到的:
def render("index.json", %{users: users}) do
%{data: render_many(users, MyApp.Api.UserView, "user.json")}
end
我的基本问题是 - 如何深入了解render_many方法并找出解决这个问题的方法?
我的第二个问题是:
答案 0 :(得分:1)
web/views/api/user_view.ex
中应该有以下代码:
def render("user.json", %{user: user}) do
%{id: user.id}
end
您只需要添加更多字段:
def render("user.json", %{user: user}) do
%{id: user.id, name: user.name, email: user.email}
end
或
def render("user.json", %{user: user}) do
Map.take(user, [:id, :name, :email])
end
documentation详细解释了Phoenix.View.render_many/4
的工作原理。
有什么好的资源可以让html和json api在凤凰城一起工作吗?
我不知道。
上面代码中的“user.json”是什么?关于“index.json”,我认为它仅用于模式匹配。
是的,该参数由render
传递给render_many
。请参阅上面的文档链接。
答案 1 :(得分:0)
有什么好的资源可以让html和json api在凤凰城一起工作吗?
如果您的html和json使用相同的资源&逻辑,他们可能应该,你可以做到以下几点:
在您看来,定义“.html”和“.json”条款,例如
def render("show.json", %{user: user}) do
%{...}
end
def render("show.html", %{user: user}) do
render ...
end
在您的控制器中,更改字符串,例如"show.html"
,对于没有后缀的原子,例如:show
在路由器中,确保在管道中同时接受html
和json
凤凰应该在请求进入时以相应的格式呈现响应。