【问题标题】:Access to the connection or 'assigns' from within a View从视图中访问连接或“分配”
【发布时间】:2016-04-20 23:16:57
【问题描述】:

我是凤凰城的新手,来自 RoR。看起来这些视图类似于 Rails 助手,并且可能是放置助手函数的地方。

如果是这样,我们如何从视图中访问连接或连接的分配?

这是我的示例问题。

应用程序显示所有用户的列表。但我只想为当前登录的用户显示 API 令牌。所以我认为UserView 中的一个方法适合在模板中执行类似的操作:

<b><%= first_name(@user) %></b> (api_token: <%= display_token(@user) %>)

对于视图中的辅助方法,我需要能够做这样的事情:

def display_token(user) do
  case conn.assigns.current_user do
    user -> user.api_token
    nil -> ""
    _ -> "hidden"
  end
end

感谢任何见解。

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    Phoenix 中没有自动将状态传递给视图中的函数。您必须将自己的 @conn 作为参数传递给 display_token

    模板:

    <b><%= first_name(@user) %></b> (api_token: <%= display_token(@conn, @user) %>)
    

    查看:

    def display_token(conn, user) do
      case conn.assigns.current_user do
        ^user -> user.api_token
        nil -> ""
        _ -> "hidden"
      end
    end
    

    (您还需要使用 pin 运算符将 current_user 与作为参数传递的 user 进行匹配。我已经在上面的代码中修复了这个问题。)

    【讨论】:

    • 谢谢!函数式编程对我来说是一种范式转变,但我发现 Phoenix/Elixir 很有趣。效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    相关资源
    最近更新 更多