Phoenix:未在视图中检索值

时间:2017-07-03 10:16:31

标签: elixir phoenix-framework

我想让团队在模板中获得价值。 我无法获得团队价值观。 QUERY没关系。 错误消息是打击。

GET / members / new的ArgumentError 在eex模板中指定@teams不可用。 请确保已设置所有正确的分配。如果这 是一个子模板,确保明确给出分配 父模板,因为它们不会自动转发。

有什么不对吗?

member_controller.ex

  def new(conn, _params) do
    changeset = Member.changeset(%Member{})
    teams = Repo.all(Team)
    assign(conn, :teams, teams)
    render(conn, "new.html", changeset: changeset)
  end

form.html.eex

<%= @teams %>

2 个答案:

答案 0 :(得分:3)

Elixir是一种不可变的语言。执行assign(conn, :teams, team)时,conn本身不会被修改,而是返回一个新的更新版本。 修复将是:

def new(conn, _params) do
  changeset = Member.changeset(%Member{})
  teams = Repo.all(Team)
  conn = assign(conn, :teams, teams)
  render(conn, "new.html", changeset: changeset)
end

可以使用管道运算符进一步清理:

def new(conn, _params) do
  changeset = Member.changeset(%Member{})
  teams = Repo.all(Team)
  conn
  |> assign(:teams, teams)
  |> render("new.html", changeset: changeset)
end

答案 1 :(得分:0)

我认为上面的代码可以修改为

def new(conn, _params) do
  changeset = Member.changeset(%Member{})
  teams = Repo.all(Team)
  render("new.html", changeset: changeset, teams: teams)
end