如何调试eex模板和@变量?

时间:2016-09-08 08:37:02

标签: elixir phoenix-framework

我有这个模板

  <%= form_for @changeset, bid_path(@conn, :update, 1), [method: :put], fn f -> %>
    <% 
      require IEx
      IEx.pry
    %>
<%= if @changeset.action do %>
  <div class="alert alert-danger">
    <p>Oops, something went wrong! Please check the errors below.</p>
  </div>
<% end %>

如何在IEx控制台中显示@changeset?当我试图这样做时会出错:

pry(5)> @changeset
** (ArgumentError) cannot invoke @/1 outside module
    (elixir) lib/kernel.ex:3960: Kernel.assert_module_scope/3
    (elixir) expanding macro: Kernel.@/1
             web/templates/bid/edit.html.eex:5: (file)

1 个答案:

答案 0 :(得分:9)

凤凰城@模板中的

eex与Elixir / iex中的@完全无关。在Phoenix的eex模板@foo is roughly equivalent to Access.fetch!(assigns, :foo)中,在Elixir / iex中,它们用于定义模块属性。因此,为了访问@changeset中的iex,您可以执行以下操作:

Access.fetch!(assigns, :changeset)

或者只是以下内容,如果您对不存在的密钥获取nil没有问题:

assigns[:changeset]