Ale*_*ndr 1 elixir phoenix-framework
我不知道如何正确进行检查以向用户隐藏操作
<%= if @current_user.id == @post.user_id do %>
<span>
<%= link "Edit", to: Routes.post_path(@conn, :edit, @post) %>
</span>
<span>
<%= link "Delete", to: Routes.post_path(@conn, :delete, @post), method: :delete, data: [confirm: "Are you sure"] %>
</span>
<% end %>
Run Code Online (Sandbox Code Playgroud)
当用户未登录时,出现此错误:
GET
/posts/1函数中的 UndefinedFunctionErrornil.id/0未定义
在本例中,您的@current_user为nil,因此 Elixir 尝试运行nil.id但失败了。
您可能可以通过nil首先检查来解决您的问题:
<%= if @current_user && @current_user.id == @post.user_id do %>
Run Code Online (Sandbox Code Playgroud)
错误消息有点令人困惑,因为nil它也是一个原子,并且该a.b语法在 Elixir 中有两种用途:
:b访问映射/结构上的原子键a(您正在尝试执行的操作)a.b()函数,a作为模块原子nil同样是一个原子,它被解释为nil.id(),但该nil.id/0函数不存在,因为nil它不是一个实际的模块。