【发布时间】:2018-03-20 23:04:48
【问题描述】:
我将一些代码从 post/index.html.eex 移至 app.html.eex
<%= if @user do %>
<ul class="nav navbar-nav navbar-right">
<li>Hello <%= @user.username %>!</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li> <%= link "logout", to: session_path(@conn, :logout), method: :delete, class: "logout-button" %></li>
</ul>
</ul>
<% else %>
<ul class="nav navbar-nav navbar-right">
<li ><a class="login" href="/users/signin">Login</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a class="signup" href="/users/new">Signup</a></li>
</ul>
<% end %>
当用户尝试登录时,它会引发:
assign @user not available in eex template.
Please make sure all proper assigns have been set. If this
is a child template, ensure assigns are given explicitly by
the parent template as they are not automatically forwarded.
Available assigns: [:conn, :view_module, :view_template]
这是来自用户控制器的部分代码:
def index(conn, _params) do
users = Auths.list_users()
render(conn, "index.html", users: users)
end
def new(conn, _params) do
changeset = Auths.change_user(%Citybuilder.Auths.User{})
render(conn, "new.html", changeset: changeset)
end
def create(conn, %{"user" => user_params}) do
case Auths.create_user(user_params) do
{:ok, user} ->
conn
|> put_flash(:info, "Welcome! Happy writing :)")
|> redirect(to: "/users/signin")
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "new.html", changeset: changeset)
end
end
def signin(conn, _params) do
render(conn, "signin.html")
end
我不确定如何从控制器中专门引用 app.html.eex。
我查看了类似的问题,但找不到答案:
assign @changeset not available in eex template
我需要在“signin.html.eex”之后添加分配,遵循conn, template, assigns 模式。
def signin(conn, _params) do
render(conn, "signin.html")
end
【问题讨论】: