我使用“mix phoenix.gen.json”生成渲染json的代码,结果如下所示:
(5,4,6,8)
然而,当我尝试访问它时,我收到:无法为Pghm.SightingsView呈现“sighting.json”,请为render / 2定义匹配子句或在“web / templates / sightings”中定义模板。没有为此模块编译模板。 分配:
我看到的任何地方都表明这应该有效,但我没有爱。
答案 0 :(得分:9)
我最近也和凤凰城一起开始,但可能我知道这是什么问题。
def render("sighting.json", %{sighting: sighting}) do
%{what: sighting.what,
lat: sighting.lat,
long: sighting.long}
end
这个函数的定义是,只有当你这样调用它时它才会起作用:
render("sighting.json", %{sighting: some_data})
但是这段代码:
%{data: render_many(sightings, Pghm.SightingsView, "sighting.json")}
通过目击本身来渲染第二个参数,而不是所需的%{目击:瞄准}事物。所以Elixir无法找到适合给定参数的渲染实现并引发错误。
更改
def render("sighting.json", %{sighting: sighting}) do
到
def render("sighting.json", sighting) do
应该这样做。
答案 1 :(得分:2)
我今天遇到了这个问题,这是因为我将视图的名称复数化,就像在Rails中一样。
根据凤凰源(1)中的评论,密钥是从视图名称推断出来的。
集合是任何可枚举的结构。此函数返回 列表中呈现的集合:
function all_fonts_loaded(callback) { return all_fonts_loaded_promise.then(callback); // ^^^^^^ ^^^^ }
大致相当于:
render_many users, UserView, "show.html"
基础用户将作为
自定义分配中的键名称Enum.map(users, fn user -> render(UserView, "show.html", user: user) end)
传递给视图和模板,这是从视图名称推断出来的。可以使用:user
选项
所以试试这个:
:as