首页 > 解决方案 > 如何正确使用mix phx.gen.html?收到错误:“(混合)预期架构“帖子”是有效的模块名称”

问题描述

我正在尝试从这个视频中学习长生不老药和凤凰: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

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

标签: elixirphoenix-frameworkelixir-mix

解决方案


由于 elixir 是一种非常年轻的语言,2017 年的视频已经过时,从那时起很多基础设施都发生了变化。在这个时间点,elixir 和 phoenix 相当稳定,至少 elixir 不会再收到任何重大变化,但是旧视频对您没有太大帮助。

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

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

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

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

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

PS:与其追随那个过时的系列,只需观看一些人们教授如何使用 Ecto 之类的会议的会议,这个特别好,因为它通过不将凤凰纳入项目中明确区分了 Ecto 所代表的内容。


推荐阅读