Don*_*ley 5 elixir phoenix-framework
我使用"mix phoenix.gen.json"来生成渲染json的代码,结果如下所示:
defmodule Pghm.SightingsView do
use Pghm.Web, :view
def render("sighting.json", %{sighting: sighting}) do
%{what: sighting.what,
lat: sighting.lat,
long: sighting.long}
end
def render("index.json", %{sightings: sightings}) do
%{data: render_many(sightings, Pghm.SightingsView, "sighting.json")}
end
def render("show.json", %{sighting: sighting}) do
%{data: render_one(sighting, Pghm.SightingsView, "sighting.json")}
end
end
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试访问它时,我收到:无法为Pghm.SightingsView渲染"sighting.json",请为render/2定义匹配子句或在"web/templates/sightings"中定义模板.没有为此模块编译模板.分配:
我看过的每个地方都表明这应该有效,但我没有爱.
小智 9
我最近也和Phoenix一起开始,但可能我知道这是什么问题.
def render("sighting.json", %{sighting: sighting}) do
%{what: sighting.what,
lat: sighting.lat,
long: sighting.long}
end
Run Code Online (Sandbox Code Playgroud)
这个函数的定义是,只有当你这样调用它时它才会起作用:
render("sighting.json", %{sighting: some_data})
Run Code Online (Sandbox Code Playgroud)
但是这段代码:
%{data: render_many(sightings, Pghm.SightingsView, "sighting.json")}
Run Code Online (Sandbox Code Playgroud)
通过目击本身来渲染第二个参数,而不是所需的%{目击:瞄准}事物.所以Elixir找不到适合给定参数的渲染实现并引发错误.
更改
def render("sighting.json", %{sighting: sighting}) do
Run Code Online (Sandbox Code Playgroud)
只是
def render("sighting.json", sighting) do
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩.
| 归档时间: |
|
| 查看次数: |
5392 次 |
| 最近记录: |