How to properly use mix phx.gen.html? Receiving an error: "(Mix) Expected the schema, "posts", to be a valid module name"

How to properly use mix phx.gen.html? Receiving an error: "(Mix) Expected the schema, "posts", to be a valid module name"

我正在尝试从这个视频中学习 elixir 和 phoenix:https://www.youtube.com/watch?v=KiP23mk760E&list=PLtTtLKRL6UYGxOHToRYnXBynon5plZ7Jd&index=2 尽管相当新鲜,但在某些信息上似乎已经过时了。例如 "mix phoenix.gen.html" 被 "mix phx.gen.html" 取代,这就是我目前正在努力解决的问题。在视频中显示命令:

mix phoenix.gen.html Post posts title:string body:text

但是当我尝试执行时: 混合 phx.gen.html Post 个帖子 title:string body:text 我收到以下开头的错误: “(混合)预期模式 "posts" 是一个有效的模块名称”,我在这里迷路了。我已经阅读了 phx.gen.html 的文档,但这对我没有太大帮助,因为我不知道应该使用哪个模块。我尝试使用 --no-context 但这没有帮助,我仍然遇到同样的错误。基本上我的问题是:如何使用 phx.gen.html 以便让我继续学习该教程。

由于 elixir 是一门非常年轻的语言,2017 年的视频已经过时,从那以后很多基础设施都发生了变化。目前 elixir 和 phoenix 非常稳定,至少 elixir 不会再有任何重大变化,但是旧视频对你帮助不大。

在 phoenix 中引入了上下文的概念来替代模型结构。其背后的想法是您不会将所有模式都放在模型文件夹中,而是将一堆模式分组在一个上下文中, 是一个公共域,您可以更多地了解它是如何工作的from凤凰原创者

为了更清楚,gen 的定义现在是这样的:

mix phx.gen.html [Context] [Schema name] [Table name] [Fields] ...

所以基本上你只需要在其他一切之前添加你的上下文,就像这样:

mix phx.gen.html Articles Post posts title:string body:text

PS:与其关注那个过时的系列,不如看一些会议,人们教他们如何使用 Ecto 之类的东西,这个 one 特别好,因为它清楚地区分了 Ecto 和什么表示不将 phoenix 纳入项目。