【问题标题】:Phoenix Elixir Canary/Canada undefined function can?3 when trying to access inside template viewPhoenix Elixir Canary/Canada undefined function can?3 尝试访问内部模板视图时
【发布时间】:2017-10-27 23:15:16
【问题描述】:

我正在尝试按照此示例coherence_demo with canaryCoherenceCanary 一起使用。

除了我使用Phoenix v1.3.0 而上面的示例(在其canarybranch 上)仍在使用Phoenix 的早期版本

除了我无法从(布局)模板视图内部访问CanaryCanadacan?3 函数之外,我似乎已经让它工作了(肯定是通过/在控制器内部工作)。

给我这个错误:

== Compilation error in file lib/my_project_web/views/layout_view.ex == ** (CompileError) lib/my_project_web/templates/layout/app.html.eex:20: undefined function can?/3 (stdlib) lists.erl:1338: :lists.foreach/2 (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6 (elixir) lib/kernel/parallel_compiler.ex:121: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/1

我的abilities.ex 文件位于lib 目录中,如下所示:./lib/abilities.ex

可能有什么问题?如何注册Canada/Canary以便在模板视图中使用?

【问题讨论】:

  • 跑题了,但连贯性很差,最好不要使用它
  • 您还有其他建议吗?根据您的经验,Guardian 是否更好?刚刚在我的脑海中传递,可能最好直接在Canary's Github Issues 上提问,因为我认为这是一个特定的Canary 问题,而不是Canary - Coherence 组合。
  • 你是否在web.ex中的view函数中添加了这样的import Canada.Can这样的:github.com/smpallen99/coherence_demo/blob/…
  • 天哪!而已!虽然一直关注exact commit here,但我错过了它。它实际上处于最底层,我错过了。谢谢你。如果你愿意,请把答案写在下面,以便我接受。

标签: elixir phoenix-framework


【解决方案1】:

can?Canada.Can 模块中定义。错误消息表明您的视图没有导入该模块。您链接到的示例项目通过将导入添加到web/web.ex 中的view 函数,在所有视图中导入该模块,您可能忘记了:

In web/web.ex:

defmodule CoherenceDemo.Web do
  def view do
    quote do
      ...

      import Canada.Can
    end
  end
end

【讨论】:

  • 就是这样!这解决了我的问题。谢谢。
猜你喜欢
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
相关资源
最近更新 更多