gpt4 book ai didi

elixir - 在 Phoenix routes.ex 中动态定义顶级路由

转载 作者:行者123 更新时间:2023-12-05 00:20:18 25 4
gpt4 key购买 nike

我想做的是根据可用于数据库中特定模型的 slug 动态路由顶级路径,就像 GitHub 对用户/组织名称(如 https://github.com/elixir-lang)的处理方式一样。和 https://github.com/phoenixframework ,但我似乎无法在 PhoenixFramework 中了解它。

到目前为止,我在 routes.ex 中尝试过的内容是:

Enum.each(MyApp.Repo.all(MyApp.User), fn section ->
get "/#{user.username}", UserController, :show, assigns: %{"username" => user.username}
end)

但是当它尝试编译应用程序时,我最终遇到以下错误:
== Compilation error on file web/router.ex ==
** (ArgumentError) repo MyApp.Repo is not started, please ensure it is part of your supervision tree
lib/ecto/query/planner.ex:91: Ecto.Query.Planner.cache_lookup/3
lib/ecto/query/planner.ex:72: Ecto.Query.Planner.query/4
lib/ecto/repo/queryable.ex:91: Ecto.Repo.Queryable.execute/5
lib/ecto/repo/queryable.ex:15: Ecto.Repo.Queryable.all/4
web/router.ex:25: (module)
(stdlib) erl_eval.erl:669: :erl_eval.do_apply/6
(elixir) lib/kernel/parallel_compiler.ex:100: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/8

最佳答案

routes.ex是 DSL,在编译时解析,而不是在运行时解析。错误消息中的前两个词是 Compilation error .这意味着,您不能在 route 使用数据库。

相反,尝试像这样定义顶级路由:

get /:user_slug, UserController, :show

在您的 Controller 中,检查该用户是否存在于 db 中,如果不存在,则返回 404。

关于elixir - 在 Phoenix routes.ex 中动态定义顶级路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34802497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com